【发布时间】:2022-12-12 05:30:28
【问题描述】:
我想知道为什么 React 在调用方法 onChange 后不更新状态。
概括:一个简单的输入元素,带有两个要显示的右浮动图标。如果输入文本的长度为 0,则显示一个图标;如果输入文本长度 > 0,则显示另一个图标。但在我在输入元素中输入第二个文本后,React 似乎正在更新状态。
我需要的是:
如果长度 == 0 则显示 %,如果长度 > 0 则显示 X。
如果长度 > 0,则用户点击 X 设置输入文本 == "" 或 input.length = 0。
问题是:虽然我能够清除输入,但未显示图标 %。
export default function App() {
const [userInput, setUserInput] = useState("");
const [displayIcons, setDisplayIcon] = useState({
default: "d-block",
clear: "d-none"
});
const onChange = (e: any) => {
const _userInput = e.currentTarget.value;
setUserInput(_userInput);
console.log("_userInput", _userInput.length);
console.log("userInput", userInput.length);
if (_userInput.length > 0)
setDisplayIcon({ default: "d-none", clear: "d-block" });
else setDisplayIcon({ default: "d-block", clear: "d-none" });
};
const clearText = (e: any) => {
setUserInput("");
};
return (
<Row>
<Col>
<div className="input-group position-relative">
<div className="form-control">
<label id="default" className={`${displayIcons.default}`}>
%
</label>
<label className={`${displayIcons.clear}`} onClick={clearText}>
X
</label>
<Input
type="text"
className="custom-input"
placeholder="Enter Something"
onChange={onChange}
value={userInput}
/>
</div>
</div>
</Col>
</Row>
);
}
【问题讨论】:
-
你应该使用
useCallback。 -
@morganney 在
clearText和onChange上都使用CallBack ??
标签: javascript reactjs typescript react-hooks