Javascript 我应该在生命周期的哪一点修改道具?

Javascript 我应该在生命周期的哪一点修改道具?,javascript,reactjs,Javascript,Reactjs,我有一个接收道具的反应组件。这些道具需要映射到不同的结构才能使用(对于select,它需要与我们的商店不同的结构)。我想知道在生命周期的哪个阶段我应该这样做 我已经阅读了文档:,它建议保持渲染函数的纯净: render()函数应该是纯函数,这意味着它不会修改 组件状态,每次调用时返回相同的结果, 它不会从DOM中读取或写入数据,也不会进行交互 使用浏览器 现在我假设映射道具仍然可以,因为这不是状态,我不会更改它们: import React from 'react'; export defau

我有一个接收道具的反应组件。这些道具需要映射到不同的结构才能使用(对于select,它需要与我们的商店不同的结构)。我想知道在生命周期的哪个阶段我应该这样做

我已经阅读了文档:,它建议保持渲染函数的纯净:

render()函数应该是纯函数,这意味着它不会修改 组件状态,每次调用时返回相同的结果, 它不会从DOM中读取或写入数据,也不会进行交互 使用浏览器

现在我假设映射
道具仍然可以,因为这不是
状态,我不会更改它们:

import React from 'react';

export default class IndicatorSelect extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    const options = this.props.store.items.map(item => ({ value: item.id, label: item.name }));

    return (
      <div>Display the data in some way here: {options.value} {options.label}</div>
    );
  }
}

ThisComponent.propTypes = {
  store: React.PropTypes.object.isRequired,
};
从“React”导入React;
导出默认类指示符选择扩展React.Component{
建造师(道具){
超级(道具);
}
render(){
const options=this.props.store.items.map(item=>({value:item.id,label:item.name}));
返回(
在此处以某种方式显示数据:{options.value}{options.label}
);
}
}
ThisComponent.propTypes={
存储:React.PropTypes.object.isRequired,
};

这是推荐的方式,还是父组件应该负责格式化传递给该组件的道具?或者我应该用一种生命周期方法,或者完全不同的方式来做这件事?

是的,@selvagsz评论是正确的-规范化
道具
内部
渲染
没有那么糟糕,除非你做得很重。如果“太多”,我会创建一个容器组件,使
道具正常化,并将它们传递给只负责渲染的呈现组件

回答这个问题并不容易,但我遵循的经验法则是:

一个演示组件应该以最方便/规范化的方式接收道具,以便它只负责渲染。


然而,对于您的示例中的规范化,创建额外的容器组件是没有意义的——此时的开销太大了当你开始感受到转换道具的痛苦时,创建一个容器组件,让它为你转换它们,或者如果它已经是一个容器,则在父级中进行转换。

我不认为在渲染中规范道具是一个坏主意。只要确保你没有变异propsAh ok。所以它不是那么黑和白,而是更多地与规模有关。如果它变得烦琐抽象,确切地说,随着时间的推移,你会有一种感觉,别担心。