问题描述
在nextjs应用程序中考虑以下简单页面:
type MyProps = {
myData: string[]
}
export const getServerSideProps: GetServerSideProps<MyProps> = async ({ req,res }) => {
return { props: {myData: calcData()} }
}
function MyComponent(props: MyProps) {
return <div>{props.myData}</div>
}
在道具中准备数据的最佳实践是什么?对于我来说,我需要根据服务器端代码(客户端浏览器中的当前语言)所不存在的标准对数据进行排序,使用next-i18next)。我可以使用像
这样的状态function MyComponent(props: MyProps) {
const [sortedProps] = useState({myData: props.myData.sort(...)})
return <div>{sortedProps.myData}</div>
}
但这对我来说听起来并不像“ React想要的”。也许一次运行的useEffect(() => {...},[])
是更好的选择?如果是,如何记起useEffect
的结果数据? useRef
?
编辑:还是useMemo
走的路?
解决方法
您可以按如下方式使用惰性初始状态:-
const [state,setState] = useState(() => {
const initialState = someExpensiveComputation(props);
return initialState;
});
参考:https://reactjs.org/docs/hooks-reference.html#lazy-initial-state