在 React 组件中设置 state 和 props 之外的值是一种反模式吗?

Is setting a value outside of both state and props in a React component an anti-pattern?

在几乎所有关于数据和 React 的对话中,Props 和 State 是两个最常见的概念。但是,我注意到在技术上有第三种在 React 组件中设置数据的方法。更具体地说,你可以通过设置一个值来设置一个值this

比如下面的代码我设置了三个值。一个值在 State 上,一个值在默认的 Props 上,另一个在 this 上。我可以打印所有这三个。

import React, { Component } from "react";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      stateSecret: "foo"
    };
    this.otherSecret = "bar";
  }

  render() {
    return (
      <div className="App">
        {this.state.stateSecret}
        <br />
        {this.otherSecret}
        <br />
        {this.props.propsSecret}
      </div>
    );
  }
}

App.defaultProps = {
  propsSecret: "baz"
};

export default App;

一般来说,我想知道我是否通过将值设置为 this 来实施反模式。这是我应该避免的事情吗?

不,这不是反模式,通常没问题。

如果它是一个常量,您甚至可以在外部定义它(第 4 种方式 :D),例如:

const otherSecret = "bar";
class App extends Component {

}

一般而言:

  • 如果它会根据组件中定义的某些逻辑发生变化,请在状态中定义它

  • 在父级中定义它,如果它将根据父级中定义的逻辑更改,则作为 prop 传递

还有一件事要考虑,当 prop 或 state 的值发生变化时,组件会触发变化并再次运行 render(),所以如果你想反映变化,你应该在状态或作为来自父组件的道具。