【发布时间】:2021-03-27 21:57:46
【问题描述】:
我试图了解当您在一个组件中同时拥有 props 和 useState 时会发生什么。
我写了一个小例子,它有一个父组件用另一个子组件打印它的数字 -
const MyNumbers = (props) => {
const [numbers, setNumbers] = useState([...props.arr]);
function changeNumbers() {
setNumbers((nums) => [...nums.map(() => Math.floor(Math.random() * 10))]);
}
return (
<div className="MyNumbers">
<div>
<button onClick={changeNumbers}>Chane numbers</button>
</div>
<div>
{numbers.map((num, idx) => (
<SingleNumber key={idx} num={num}></SingleNumber>
))}
</div>
</div>
);
};
const SingleNumber = (props) => {
const [num] = useState(props.num);
useEffect(() => {
console.log("useEffect called");
});
return <h3>The number is {num}</h3>;
};
SingleNumber 组件使用useState,正如您所见,单击“更改数字”操作不会更改子组件中的值。
但是当我编写几乎相同的代码但现在 SingleNumber 不使用 useState 时,然后单击“更改数字”会更改子组件中的所有值 (like in this demo)。
说一个带有useState 的函数组件只渲染一次,然后仅在状态更改时才更改,而props 更改时才更改,这是否正确?
【问题讨论】:
-
组件每次都重新渲染。但是您基本上 缓存 本地状态中的值并一直输出该值。您传递给
useState的值仅用于安装组件时(仅限第一次)。
标签: javascript reactjs react-hooks use-state