【发布时间】:2020-03-03 05:52:03
【问题描述】:
当我像这样将函数参数传递给 useState() 时:
const [testA, setTestA] = useState(returnTestA()); // run every rendering
const [testB, setTestB] = useState(returnTestB); // run only mount
- 每次渲染都会运行带有 () 的函数
- 但是没有()的函数只运行第一次渲染(mount)
这是我的全部代码:(info.js)
import React, { useState } from "react";
let count = 0;
const returnTestA = () => {
count++;
console.log("test A: " + count);
return "test";
};
const returnTestB = () => {
count++;
console.log("test B: " + count);
return "test";
};
const Info = () => {
const [name, setName] = useState("");
const [testA, setTestA] = useState(returnTestA()); // run every rendering
const [testB, setTestB] = useState(returnTestB); // run only mount
const onChangeName = e => {
setName(e.target.value);
};
return (
<div>
<div>
<input name="name" value={name} onChange={onChangeName} />
</div>
<div>
<div>
<b>Name:</b> {name}
</div>
</div>
</div>
);
};
export default Info;
结果是:
为什么会这样??最佳做法是什么?
【问题讨论】:
-
()在引用函数之后意味着立即调用函数并在包含表达式中使用返回值。如果没有(),对函数的引用本身就是表达式的值。
标签: javascript reactjs react-hooks