所以我试图有条件地呈现一个输入标记,这就是为什么我使用一个函数,而不是把它全部放在一个return语句中。我遇到的问题是,每当我在输入标记中键入一个单词时,它就会失去焦点,我必须再次单击它以重新获得焦点。我的代码如下:
function App() {
function InputTag() {
if (someCondition) {
return (
<input onChange={(e) => setState(e.target.value)} value={State} />
)
} else {
return (
<input disabled value={State} />
)
}
}
return (
<div>
<InputTag />
</div>
)
}
经过一些调试之后,我发现当我使用一个函数返回一个输入标记时会出现这个问题,但在我的例子中,我必须使用一个函数返回输入标记。
您可以在以下位置遇到此问题:https://codesandbox.io/s/xenodochial-bassi-3gmyk
1条答案
按热度按时间m1m5dgzv1#
InputTag
每次都被重新定义App
渲染。及App
每次onChange
事件被激发,因为其状态正在更新。一个解决办法是搬家
InputTag
外App
,将状态和状态设置器作为组件道具传递。但是,您为什么说需要使用函数来执行一些条件渲染,这还不清楚。
如果您仅根据设置禁用输入
someCondition
,您可以轻松地在App
的返回语句。