【发布时间】:2021-05-24 01:25:46
【问题描述】:
我有一个组件正在被调用,然后用更新的信息再次调用,但是 var topics 没有被 react 更新。有人可以解释为什么第一个示例没有在屏幕上更新,但第二个示例可以吗?是否与 useState 调用有关?
App.js 在初始渲染期间调用一次 DisplayQuestions,然后页面接受用户输入并重新渲染。
<DisplayQuestionsByTopic topics={topics} />
.....
主题变量未在屏幕上更新:
export function DisplayQuestionsByTopic(props) {
console.log(`DisplayQuestionsByTopic`, props.topics)
const [topics, setTopics] = useState(props.topics) //<<<<<<<<
render(<h1>topics.join(',')</h1>)
}
主题变量已在屏幕上更新:
export function DisplayQuestionsByTopic(props) {
console.log(`DisplayQuestionsByTopic`, props.topics)
render(<h1>props.topics.join(',')</h1>) //<<<<<<<<<<<
}
【问题讨论】:
-
一旦将其分配给
useState(props.topics)中的状态变量,重新渲染将不会更新它。您必须完全卸载它,然后重新安装它以分配新的props.topics。如果它在每次渲染时都覆盖了 state var,那么它将破坏 react state 背后的想法。 -
@codemonkey 这是有道理的......那么第二个(工作)示例是在 React 中执行此操作的“最佳实践”方式吗?
-
视情况而定。如果您想接管
props.topics并在子组件的状态中对其进行管理,那么不。如果您的要求允许您从父级管理它并在每次渲染时将其作为静态变量发送到子级,那么是的。要回答“最佳实践”的问题,确实需要看到完整的画面。
标签: reactjs