除了调用setState,还有什么方法可以强制使React组件rerender

问题

有如下代码样例:

export default class MyComponent extends React.Component {

  handleButtonClick() {
    this.render();
  }

  render() {
    return (
      <div>
        {Math.random()}
        <button onClick={this.handleButtonClick.bind(this)}>
          Click me
        </button>
      </div>
    )
  }
}

点击按钮会导致调用this.render(),但这最终并未导致组件rerender(你可以通过{Math.random()}那里产生的文本未发生改变来判断),但是如果将this.render()替换为this.setState(),则会使组件成功rerender。

所以我的问题是:难道为了能够使组件rerender,必须要有state么?除了调用setState方法,还有没有别的方式来使组件强制rerender?

回答一

2017年4月回答

在组件内部,可以调用this.forceUpdate()这个方法强制触发rerender。 资料链接: https://facebook.github.io/react/docs/component-api.html

回答二

2016年6月回答

理论上讲,forceUpdate()是一定能够触发组件rerender的正确做法,因为setState()方法在你实现的shouldComponentUpdate()返回false时不触发rerender。对forceUpdate来说,其跳过了React组件的shouldComponentUpdate()。

geekcircle            updated 2018-05-25 21:39:41

results matching ""

    No results matching ""