微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最佳做法:仅准备一次道具进行渲染

如何解决最佳做法:仅准备一次道具进行渲染

在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?