当将html输入与样式化组件一起使用并将值保存为react state with onChange时,组件似乎会在每次状态更改时重新呈现,并导致输入失去焦点。有没有办法防止输入失去焦点?为什么会发生这种情况?这里有一个例子。
class MyComponent extends React.Component {
state = { val: "" };
render() {
const Input = styled.input`
border-radius: 6px;
`;
return (
<Input
value={this.state.val}
onChange={e => this.setState({ val: e.target.value })}
/>
);
}
}
这是因为您在render()
方法中定义了Input
。每次更新状态时,都会调用render()
方法,并且Input
将被重新定义和处理,就像它是一个全新的组件(html
const Input = styled.input`
border-radius: 6px;
`;
class MyComponent extends React.Component {
state = { val: '' };
render(){
return(
<Input
value={this.state.val}
onChange={e => this.setState({ val: e.target.value })}
/>
);
}
}
正如@Dennis Vash在每次渲染时所说的,组件都会被编译。使用指向组件的链接重新编译样式化CSS。同样,如果在函数中使用样式化组件。将其复制粘贴到函数外部,以便只创建一次变量
const CustomInput = styled.input`
border:none;
border-radius:0px;
padding:2px 11px;
border-bottom:1px solid #ced4da;
&:focus {
outline: none;
border-color:#ced4da;
}
`;
function myFun(props){
const [value, setvalue] = useState('')
return (
<CustomInput
value={value}
onChange={(e)=>setvalue(e.target.value)}
/>
)
}
在每个渲染中,您都会生成一个新的输入,因此会失去焦点。
将样式与组件解耦:
const Input = styled.input`
border-radius: 6px;
`;
class MyComponent extends React.Component {
state = { val: "" };
render() {
return (
<Input
value={this.state.val}
onChange={e => this.setState({ val: e.target.value })}
/>
);
}
}
当组件挂载时,我试图专注于输入。输入组件是一个样式化的组件,因此我使用innerRef来获取对元素的引用。然而,当组件挂载时,输入不会得到焦点。我已经检查了该节点是否实际获得了对DOM节点的引用。我找不到我的逻辑有任何问题。谢谢你的帮助。
问题内容: 我正在制作动态表格。一个有值的列表。每个值由一个字符串表示。 我的组件中有一个函数,可以向该字段添加新值。 值和按钮在我的HTML中这样显示。 一旦我在值的输入中写入一些文本,输入就会失去焦点。如果我在一个字段中添加了多个值,并且在一个输入值中写入了一个字符,则该输入将失去焦点,并且该字符将写入每个输入中。 问题答案: 当数组是原始类型(在您的情况下是数组)时,会发生这种情况。这可以通
我正在使用Office Fabric UI React组件,如果用户输入逗号字符,我希望将文本输入切换为多行文本。我可以让这部分工作,但是当输入在单行和多行输入之间切换时,它会失去焦点。因此,如果在文本字段中键入并键入逗号字符,文本字段将失去焦点。我相信,当我在两者之间切换时,office fabric react中的textfield组件会重新呈现一个textarea来代替输入,而焦点将保留在替
问题:我想更改输入元素焦点上按钮的样式。 下面是模板代码: 以下是css代码: 预期输出:在输入框 1的焦点上。将1倍宽度的边框应用于输入框 2。更改按钮的背景颜色 实际输出: 1。边框应用于输入框 2。按钮的背景色没有变化 http://jsfiddle.net/6Y8GL/7/
我遇到了一个奇怪的错误,我的搜索输入组件,它失去了对每个按键的关注,不知道为什么。 我还得到了一个
我遇到了一个非常奇怪的问题,我无法理解。我目前正在使用一个创建反应应用程序,使用反应16.3和Antd 3.11框架,我已经创建了一个表,在它的标题列中呈现一个带有onChange事件的组件。 当我第一次聚焦输入时,问题就出现了。 我在第一个关键事件上失去了焦点,之后当我再次单击该字段时,它将保持焦点,直到我单击其他内容。 下面是我一直在使用的例子:https://ant.design/compo