我正在使用MaterialUI
构建组件扩展的
,其中我有一个文本字段列表。
我在redux中存储数据。
reduxState = {
fieldName1:[
{
primaryText:"text1",
},
{
primaryText:"text2"
},
],
fieldName2:[
{
primaryText:"text1"
},
{
primaryText:"text2"
},
]
}
每个Exapanded
保留每个字段的
文本字段
组件
Exapanded
如下所示
function Expanded(props) {
const {onChange, title, list } = props
const CustomPaper = withStyles({
root:{
color: blue
}
})(Paper)
return (
<ExpansionPanel>
<ExpansionPanelSummary expandIcon={<ExpandMoreIcon />}>
<Typography>{title}</Typography>
</ExpansionPanelSummary>
<ExpansionPanelDetails>
<Grid container spacing={1} direction="row">
{list.map((item,i) =>
<CustomPaper key={i}>
<TextInput label="Main Text" value={item.primaryText} xs={12} onChange={(value) => onChange(value, i, 'primaryText')}/>
</CustomPaper >
)}
</Grid>
</ExpansionPanelDetails>
</ExpansionPanel>
);
}
使用示例
<Expanded
title={`Add FieldName1`}
list={reduxState.fieldName1}
onChange={onChangeSectionInfo('fieldName')}
/>
键入时,
onChangeSelectionInfo
函数调用redux操作updateSection
[formActionTypes.UPDATE_SECTION]: (state, action) => {
//ex. field-FieldName, value-"text1Updated", index=0, element="primaryText"
const { field, value, index, element } = action.payload;
return {
...state,
[field]: state[field].map((object, i) =>
i === index ? { ...object, [element]: value } : object
)
};
},
问题是我只能键入一个字符,然后它就会取消文本字段的焦点。是redux的问题吗,更新时间太长?
编辑:这里的解决方案没有帮助,我去掉了所有的循环,仍然不起作用
所以问题实际上是我创建的Expanded组件中的CustomFood
(我编辑了我的问题,在我没有显示我正在使用CustomFood
之前,因为它对我来说并不重要)。当我从MaterialUI更改CustomFood
到Food
时,一切都正常。有什么想法为什么?
每次在输入中键入字符时,都会调用onChange,它会更新道具,并且组件由道具组成,因此React会重新呈现它,这会使字段失去焦点。如果可以的话,尝试将事件处理程序更改为onBlur或其他东西。
当前事件链:
在每次重新渲染时,您都要重新创建CustomPaper
,这将需要完全重新安装组件(CustomPaper),而不仅仅是重新渲染,这就是您失去焦点的原因。
移除组件外部的组件,不要在组件内部定义组件。
我遇到了一个奇怪的错误,我的搜索输入组件,它失去了对每个按键的关注,不知道为什么。 我还得到了一个
在我的活动中,我有一个editText字段。当用户点击它时,editText获得焦点并出现键盘。现在,当用户按下手机上的硬件后退按钮时,键盘会消失,但光标仍保留在Edittext中,即它仍然具有焦点。当按下后退按钮时,是否有可能使EditText失去焦点?我尝试使用以下代码,但它不起作用:
当将html输入与样式化组件一起使用并将值保存为react state with onChange时,组件似乎会在每次状态更改时重新呈现,并导致输入失去焦点。有没有办法防止输入失去焦点?为什么会发生这种情况?这里有一个例子。
我正在编写文本输入,并在事件中调用,因此React重新呈现我的UI。问题是文本输入总是失去焦点,所以我需要为每个字母重新聚焦:D。
在我下面的组件中,输入字段在键入字符后失去焦点。当使用Chrome的Inspector时,看起来整个表单都在重新呈现,而不仅仅是输入字段的value属性。 我没有从eslint或Chrome Inspector得到任何错误。 提交表单本身的工作方式与实际输入字段的工作方式相同,当表单位于渲染的返回中或作为单独的组件导入时,而不是按照下面的编码方式。 为什么会这样? 主页组件 文本输入组件 提交按钮
问题内容: 我正在制作动态表格。一个有值的列表。每个值由一个字符串表示。 我的组件中有一个函数,可以向该字段添加新值。 值和按钮在我的HTML中这样显示。 一旦我在值的输入中写入一些文本,输入就会失去焦点。如果我在一个字段中添加了多个值,并且在一个输入值中写入了一个字符,则该输入将失去焦点,并且该字符将写入每个输入中。 问题答案: 当数组是原始类型(在您的情况下是数组)时,会发生这种情况。这可以通