返回

掌握精读 React 官方文档的高效方法

前端

状态提升的必要性

在 React 中,状态提升是指将组件的状态提升到更高级别的组件中,以实现组件之间的共享和管理。这在以下情况下非常有用:

  • 当多个组件需要访问相同的数据时,避免在每个组件中重复定义和管理状态。
  • 当需要在组件之间传递数据时,状态提升可以简化数据传递的过程。
  • 当需要在组件之间共享状态时,状态提升可以确保组件之间的一致性和同步。

解读状态提升的步骤

现在,让我们通过一个示例来理解状态提升的步骤:

  1. 创建一个判断水是否沸腾的组件 BoilingVerdict
const BoilingVerdict = (props) => {
  if (props.celsius >= 100) {
    return <p>The water is boiling.</p>;
  }
  return <p>The water is not boiling.</p>;
};
  1. 添加第二个输入框:
class Calculator extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      temperature: '',
      scale: 'c'
    };
  }

  handleCelsiusChange = (event) => {
    this.setState({temperature: event.target.value, scale: 'c'});
  };

  handleFahrenheitChange = (event) => {
    this.setState({temperature: event.target.value, scale: 'f'});
  };

  render() {
    const celsius = this.state.temperature;
    const fahrenheit = tryConvert(celsius, 'f');

    return (
      <div>
        <TemperatureInput
          scale="c"
          temperature={celsius}
          onTemperatureChange={this.handleCelsiusChange}
        />

        <TemperatureInput
          scale="f"
          temperature={fahrenheit}
          onTemperatureChange={this.handleFahrenheitChange}
        />

        <BoilingVerdict
          celsius={parseFloat(celsius)}
        />
      </div>
    );
  }
}
  1. 将组件的状态提升到更高级别的组件中:
class Calculator extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      temperature: ''
    };
  }

  handleTemperatureChange = (event) => {
    this.setState({temperature: event.target.value});
  };

  render() {
    const temperature = this.state.temperature;

    return (
      <div>
        <TemperatureInput
          temperature={temperature}
          onTemperatureChange={this.handleTemperatureChange}
        />

        <BoilingVerdict
          celsius={parseFloat(temperature)}
        />
      </div>
    );
  }
}
  1. 在子组件中使用提升后的状态:
const TemperatureInput = (props) => {
  const handleChange = (event) => {
    props.onTemperatureChange(event.target.value);
  };

  return (
    <fieldset>
      <legend>Enter temperature in {props.scale}:</legend>
      <input value={props.temperature} onChange={handleChange} />
    </fieldset>
  );
};

现在,我们已经将组件的状态提升到更高级别的组件中,并在子组件中使用了提升后的状态。这使我们能够在组件之间共享和管理状态,简化了数据传递的过程,并确保了组件之间的一致性和同步。

总结

状态提升是 React 中一种非常重要的概念,可以帮助我们优化组件的结构和提高代码的可维护性。通过本文,你已经学习了状态提升的必要性、步骤和示例,希望这些知识能够帮助你更好地理解和掌握 React。

在未来的文章中,我将继续为你带来更多有关 React 的知识和技巧,敬请期待!