Javascript React最佳实践:在组件中具有“状态”以外的属性

Javascript React最佳实践:在组件中具有“状态”以外的属性,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我正在查看一个React组件,它包含一个state属性以及一个allData属性 为了遵循最佳实践,所有数据不应该成为状态的一部分吗 constructor(props) { super(props); this.allData = []; this.state = { allDisplayedData: [], allRowsCount: -1, favData: [], favRowsCount: -1, };

我正在查看一个React组件,它包含一个
state
属性以及一个
allData
属性

为了遵循最佳实践,
所有数据
不应该成为
状态
的一部分吗

constructor(props) {
    super(props);

    this.allData = [];
    this.state = {
      allDisplayedData: [],
      allRowsCount: -1,
      favData: [],
      favRowsCount: -1,
    };

    this.searchAll = this.searchAll.bind(this);
    this.handleCellClick = this.handleCellClick.bind(this);
  }

如果要使阵列成为状态的一部分,则选择“是”,如果选择“否”,则选择“否”。

如果希望组件在更改时重新渲染,则它需要处于状态,否则将其放置在任何位置。除了
this.state
之外的任何实例变量都不是React控件的一部分,因此它们不具备使用setState进行设置的能力。这意味着它们不会像状态那样重新渲染组件

本质上,这取决于你用它做什么,以及你想如何使用它

我倾向于将此模式用于cancelTokens和intervalIds以及以后可能需要的其他数据,但不需要作为状态的一部分,因为它只在卸载或更新时需要,而在渲染本身中不需要


如果在渲染中需要它,您应该让它处于状态,或者准备在更新时处理未渲染的组件。

除了前面的两个详细答案之外,我在

而this.props由React自身设置,并且this.state具有 特别是,您可以自由地向类中添加其他字段 如果需要存储未参与的内容,请手动执行 数据流(如计时器ID)


它是否随时间变化?
allData
componentDidMount()
中填充一次,并跨组件中的不同方法使用。据我所知,它不会发生变异。因此,没有黄金法则规定一切都必须是
this.state
属性的一部分。我们可以为组件提供任意多的属性,并且它不是反模式?是的,正确。在组件中声明不属于状态的变量几乎是不可避免的。太好了!谢谢你的详细回复。