Next9.3~の話です。
9.3以前はgetInitialPropsでFirstRender前の前処理を行なっていたわけですが、
9.3からは必ずサーバ側で実行されるgetServerSidePropsが追加されました。
現状、getInitialPropsがなくなるわけではないため、
無理に移行しなくても良いのですが、
以下の点で不満がありました。
・サーバとクライアントの両方で実行されるため、ライフサイクル管理が手間な時がある
・サーバとクライアントで差分が生まれる時がある
・上記の理由から可読性が下がる(時がある)
乗り換えるべく、いろいろ調査をしたわけですが、
現プロジェクトにて次の問題があり、
結果移行が想像以上に大変なことがわかりました。
1) ページによってはサーバ側で特殊な動きをする(リダイレクトなど)
2) 素直なjsonをreturnしているわけではない
1はそもそも仕様の見直しから始めることになるので、
簡単に直せない。
2に関しては、どういうこと?とお思いの方もいらっしゃるでしょうが、
オブジェクトだけでなく、classから生成したインスタンスも含んでいる
ということです。
getServerSidePropsは必ずサーバサイドで実行され、クライアントに返されます。
その関係もあって、classインスタンスを返すことはできません。
しかし、getInitialPropsは、
その実行とそれを受け取るconstructorが同じ場所(サーバないしクライアント)なため、
getServerSidePropsのような縛りがありませんでした。
つまり影響範囲はStoreにも及ぶということになります。
(別途シリアライズの仕組みが必要となる)
めんどくさかー。