Child 组件在 parent 更改 prop 时不会重新渲染
Child component does not rerender when parent changes prop
parent 组件:
const Parent =
...
var render = {};
render.value = false;
...
return (
<div>
<button onClick= { () => {render.value = ! render.value; console.log(render);} } >Change Prop</button>
</div>
<Child render = { render } />
...
)
child 组件:
const Child = ({render}) => {
useEffect(() => {
console.log('This does not show up when i click parents button');
}, [render]);
return (<div></div>)
child 不应该因为 prop 改变而重新渲染吗?
我认为您没有正确更新 render
值。试试这个:
const Parent = () => {
const [render, setRender] = useState({})
return (
<div>
<button onClick={() => setRender({...render, value: false})} >Change
Prop
</button>
<Child render={render} />
</div>
)
}
这就是将父级的状态设置为一个新值,然后将其作为道具传递给 child
并在子组件中触发渲染
请记住在 React 组件中使用 state
来获取将更改并需要作为 props 向下传递的值。不使用 state
的唯一原因是常数值不会改变
parent 组件:
const Parent =
...
var render = {};
render.value = false;
...
return (
<div>
<button onClick= { () => {render.value = ! render.value; console.log(render);} } >Change Prop</button>
</div>
<Child render = { render } />
...
)
child 组件:
const Child = ({render}) => {
useEffect(() => {
console.log('This does not show up when i click parents button');
}, [render]);
return (<div></div>)
child 不应该因为 prop 改变而重新渲染吗?
我认为您没有正确更新 render
值。试试这个:
const Parent = () => {
const [render, setRender] = useState({})
return (
<div>
<button onClick={() => setRender({...render, value: false})} >Change
Prop
</button>
<Child render={render} />
</div>
)
}
这就是将父级的状态设置为一个新值,然后将其作为道具传递给 child
并在子组件中触发渲染
请记住在 React 组件中使用 state
来获取将更改并需要作为 props 向下传递的值。不使用 state
的唯一原因是常数值不会改变