reactjs - 在 React 中,如何在渲染之前访问道具(不使用 componentWillReceiveProps)
问题描述
我有一个基于从属性转换的数据呈现的组件。具体来说,该组件的属性之一是直接 JSON。然后该 JSON 由组件转换为渲染中使用的实际数据。
所以这是我不明白的一点。如果我更新了我的道具,那么在我有机会转换为数据进行渲染之前,渲染函数就会被调用。我发现 componentWillReceiveProps 功能完美,我可以在渲染之前准备好我的数据。
但是我看到这现在已被弃用,其他建议似乎在他们自己的方式上存在缺陷(在渲染后调用,或者在挂载时不调用等)
我不认为我的用例似乎特别独特,或者也许看到我对 React 的了解我误解了道具的使用,但如果不是,那么为什么这似乎不受支持?
我必须使用哪些选项来使用新数据更新我的组件并在渲染发生之前转换该数据?
为了清楚起见,这就是我正在做的事情。props.data是组件在渲染之前理想地转换的属性。
let props: IComponentProps = {
data: context.parameters.json.raw != null ? JSON.parse(context.parameters.json.raw) : undefined,
node: context.parameters.node.raw || undefined,
callback: (x) => console.log(`Got a callback on ${x}`)};
ReactDOM.render(<FluentUIDetailsListControl {...props} />, container);
解决方案
利用
static getDerivedStateFromProps(props, state) {
}
该函数在创建周期中在渲染函数之前触发,并在每次更新后首先触发。
props 变量是传递的道具。
主要是你使用道具来设置状态。
推荐阅读
- python - 无法为 docker 容器安装 google-chrome-stable
- angular - 如何在echarts中添加渐变色?
- javascript - 将复杂的 javascript 对象转换为 JSON nodejs
- php - 尝试将 GCP 的 Google Sheets API 与电子表格链接时出错
- android - 如何检查android设备上的时间是由网络还是由用户设置的?
- linux - 从 Windows VM 连接到 Linux VM 时出现 ORA-12170
- redis - AWS Elasticache Redis 6 是否使用多线程?
- php - 当没有“活动”状态的数据时进行调节
- cuda - 预测指标出乎意料地高
- bootstrap-4 - Bootstrap 2个大col之间的2个相同高度col