When I pass function parameter to useState() like this:
const [testA, setTestA] = useState(returnTestA()); // run every rendering
const [testB, setTestB] = useState(returnTestB); // run only mount
- function with () is run every rendering
- but function without () is run only first rendering(mount)
It is my whole code: (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;
the result is:
Why It happened?? And what is the best practice?