我需要维护一些代码,其中有这样一行:
this.setState({}); // Force update
这会保证导致重新渲染吗?
我需要维护一些代码,其中有这样一行:
this.setState({}); // Force update
setState
方法以不可变的方式将作为参数传递的对象合并到实际状态中。this.setState({})
不会将任何内容合并到状态中,而实际上会返回一个新的对象,由 React
执行的浅比较将始终断言为 false
并触发重新渲染,除非使用 shouldComponentUpdate
显式取消。所以,在这种情况下,它等同于 forceUpdate
并具有相同的注意事项。
import React, { Component } from 'react';
import { Button } from 'react-native';
class Test extends Component {
render() {
console.log('render');
return <Button onPress={() => this.setState({})} title='Test' />;
}
}
export default Test;
this.setState({})
替换为this.setState()
,则单击后不会重新渲染。这要看情况。如果你想渲染一个组件,React 会内部检查 DOM 是否与之前相同(如果组件的 props 没有改变)。如果 DOM 与之前版本相同,React 将检查 shouldComponentUpdate
。 forceUpdate
与 this.setState({})
不同,它总是会重新渲染组件。
this.forceUpdate()
可以保证强制重新渲染,但会对代码结构和实践方式产生疑问。 - Anurag Srivastava