javascript - 外部组件道具的更改不会触发 componentDidUpdate(但会触发重新渲染)
问题描述
在下面的代码中,每当数据更新时,我都会在页面上重新呈现用户数据消耗组件。
关于 DialogModal 组件,从外部重新渲染当前输出:
- [class'] render() 使用新道具正确执行
- 保持状态(前一个对话框索引处的当前值)
- 没有调用 componentDidUpdate,这就是问题所在..
我首先期待:
- 从外部重新渲染,要完全重新安装的组件
但我现在正在尝试:
- 使用 componentDidUpdate 功能触发当前值重新初始化
由于未知原因,调用外部 render() 方法不会让我进入 componentDidUpdate 内部(即使它正确渲染,当前对话框)
const updateUser = (updates, lang) => {
const updatedUser = Object.assign({}, window.user, updates)
window.user = updatedUser
render(<UserPanel user={ window.user }/>, document.getElementById('anchor-user-panel'))
const firstDialog = updatedUser.dialogs.find(dialog => dialog.openFirst)
if (firstDialog) {
render(<DialogModal dialog={ firstDialog }
uid={ window.user.uid }
updateUser={ updateUser }
lang={ lang }
translations={ window.translations.dialog }/>, document.getElementById('anchor-dialog'))
}
}
解决方案
快速解释和解决方案:
- componentDidMount在组件重新渲染后调用,这意味着您必须编写一个弹性的 render() 方法(允许生命周期中的数据不连贯)
- 为了适合我的用例(当 dialog 属性更改 [从外部] 时将 state.current 设置为 0),你可以使用getDerivedStateFromProps .. 即使这篇 React 文章强烈坚持这样的假设,“你可能不需要派生状态"
. 潜入水中!
推荐阅读
- php - 无需登录即可验证 Google 云端硬盘上传
- python - 如何在 PyTorch 中使用 double 作为浮点数的默认类型
- javascript - 我希望列表中的检查值存储在数组中,但它没有给我正确的结果
- google-apps-script - 用于在 Google 电子表格脚本中输入换行符的关键字
- python-3.x - python3在命令行arg为TRUE时执行函数
- kubernetes - Minikube 默认 CPU/内存
- javascript - 如何在Angular中为ngx-datatable-column传递多个管道?
- boost - 如何在递归数据结构上使用 boost::interprocess::private_node_allocator?
- vba - Excel Userform 仅显示链接的工作表是否处于活动状态
- apache-kafka - 使用新的主题模式更新 ksql 流