在 react 中控制重新渲染?

Controlling re-renders in react?

提问人:De-J 提问时间:7/28/2023 最后编辑:De-J 更新时间:7/28/2023 访问量:40

问:

我的任务是使用反应生命周期方法*其他*来控制组件的重新渲染。就像如果返回 false 如何防止重新渲染一样,如果状态与之前的状态相同,我应该能够使用其他生命周期方法之一(例如,也许?)来防止重新渲染。shouldComponentUpdate()shouldComponentUpdate()componentWillUpdate()componentDidUpdate()

这可能吗?如果是这样,如何?

我有这种类型的设置:

class App extends Component {
  constructor() {
    super();
    this.state = {
      text: "",
      someStateProperty: "abcd"
    };
  }

  // shouldComponentUpdate(nextProps, nextState) {
  //   if (this.state.someStateProperty !== nextState.someStateProperty)
  //     return true;
  //   return false;
  // }

  render() {
    console.log("render");
    return (
      <input
        value={this.state.text}
        type="text"
        onChange={(e) => this.setState({ text: e.target.value })}
      />
    );
  }
}

在上面的代码中,我在保持不变的同时进行更新。this.state.textthis.state.someProperty

shouldComponentUpdate()每次调用 时都会调用,并且由于内部的比较而返回 false,从而防止输入组件的重新呈现,因为 中没有变化。
这样可以防止函数再次运行,并且我不会在控制台中记录渲染。
this.setStatethis.state.somePropertyrender()

那么,有没有另一种生命周期方法可以复制这种行为呢?

我还在这里创建了一个沙盒/游乐场。

reactjs 基于反应类的组件

评论

0赞 3limin4t0r 7/28/2023
没有理由使用其他生命周期方法。你可以改变逻辑.但是,如果您只是不想重新渲染组件,并且没有进行状态更改或属性更改,那么您可能应该从 PureComponent 而不是 Component 继承。return nextProps.someStateProperty !== this.state.someStateProperty || nextProps.text !== this.state.text
0赞 De-J 7/28/2023
我已经建议过,但我的前辈坚持认为还有另一种方法/生命周期方法。shouldComponentUpdate()PureComponent
0赞 3limin4t0r 7/28/2023
也许他们正在谈论在某处调用 forceUpdate(),但在这种情况下,这似乎是一件奇怪的事情。
0赞 De-J 7/28/2023
他们给我的例子和我举的例子很相似。他们说,如果调用后状态实际上没有改变,我应该可以不重新渲染。setState

答: 暂无答案