react如何更新视图
更新视图的核心方法
React通过状态(state)和属性(props)的变化触发视图更新。当组件内部状态改变或接收新属性时,React会自动重新渲染组件。
使用useState Hook管理状态
函数组件中使用useState定义状态变量和更新函数。调用更新函数会触发重新渲染:
const [count, setCount] = useState(0);
// 更新状态并触发渲染
setCount(count + 1);
类组件中的setState
类组件通过this.setState()更新状态,支持对象或函数形式:
this.setState({ count: this.state.count + 1 });
// 函数形式确保基于最新状态
this.setState(prevState => ({
count: prevState.count + 1
}));
使用useEffect处理副作用
useEffect在渲染后执行,可响应状态/属性变化:
useEffect(() => {
document.title = `Count: ${count}`;
}, [count]); // 仅在count变化时执行
强制更新组件
非常规情况下可使用强制更新,但不推荐作为常规手段:
// 类组件
this.forceUpdate();
// 函数组件(通过状态变化间接实现)
const [, forceUpdate] = useState();
forceUpdate({});
优化渲染性能
使用React.memo、useMemo和useCallback避免不必要的渲染:
const MemoComponent = React.memo(MyComponent);
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]);
上下文更新
通过useContext订阅上下文变化,当提供者值更新时触发重新渲染:
const value = useContext(MyContext);
不可变数据原则
状态更新时应返回新对象/数组而非修改原对象,确保React能正确检测变化:
setItems([...items, newItem]);
setObj({ ...obj, key: newValue });






