【发布时间】:2019-08-29 11:58:03
【问题描述】:
目前我正在做一个项目,我们正在从 AngularJs 过渡到 React,但我遇到了一个我无法解决的问题。问题如下:
我有显示所有用户的父组件。父组件是指多个子组件(编辑用户,用户订单,用户活动等),但是当我更改用户之间的时候,子组件中的道具没有改变,它仍然显示以前的用户。
示例。
单击用户 A - 单击编辑用户(工作正常)。
点击用户 B - 点击编辑用户(显示用户 A 的道具)。
我查看了文档,但找不到合适的解决方案。我从 React 文档中看到了以下文章:https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-controlled-component
它说一个可能的解决方案是你的组件的关键。密钥更新后,道具将更新。如果我只有 1 个子组件,此解决方案将有效。不幸的是,事实并非如此。
这是子组件的代码:
{isSelected ? <IndividualModalComponent onClose={() => setShowEditDialog(false)} isDialogOpen={showEditDial} key={selectedIndividual.id} individual={selectedIndividual}/> : null}
{isSelected ? <IndividualSecurityComponent onClose={() => setShowPermissionDialog(false)} isDialogOpen={showPermissionDial} key={selectedIndividual.id} individual={selectedIndividual}/> : null}
{isSelected ? <IndividualPasswordComponent onClose={() => setShowPasswordDialog(false)} isDialogOpen={showPasswordDial} key={selectedIndividual.id} individual={selectedIndividual}/> : null}
{isSelected ? <IndividualTwoFactorComponent onClose={() => setShowTwoFactorDialog(false)} isDialogOpen={showTwoFactorDial} key={selectedIndividual.id} individual={selectedIndividual}/> : null}
{isSelected ? <IndividualSessionComponent onClose={() => setShowSessionDialog(false)} isDialogOpen={showSessionDial} key={selectedIndividual.id} individual={selectedIndividual}/> : null}
{isSelected ? <IndividualOrderComponent onClose={() => setShowOrderDialog(false)} isDialogOpen={showOrderDial} key={selectedIndividual.id} individual={selectedIndividual}/> : null}
使用上面显示的代码时,我收到以下错误:
backend.js:6 Warning: Encountered two children with the same key, `48097be2-84c2-4a29-acdc-87e57ba88428`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behaviour is unsupported and could change in a future version.
这是因为我对多个组件使用相同的密钥。
我希望能够在道具也发生变化的用户之间切换。有没有办法做到这一点?
【问题讨论】:
-
如何在子组件中更新用户?你能提供一个例子吗?个人安全组件?
标签: reactjs components