reactjs - TextField 只接受一个字母并失去焦点
问题描述
我有这个组件,我有一个文本字段organizationName
供用户输入其名称。我将此文本字段包含在路由器中,以便在特定路由与此匹配时显示。
但是,当我将它包含到此路由器时,Textfield 只是出错,让我在失去焦点后只输入一个字母。然后我必须一次又一次地输入下一个字母。我认为这是我导入此内容的方式。任何帮助都意义重大。
我正在使用material-UI
和react-routerv4
const [organizationName, setOrganizationName] = useState('')
const handleChange = (event) => {
setOrganizationName(event.target.value)
}
这是我导入的 Textfield 函数:
const addOrganizationView = () => {
return (
<div className={content}>
<h1 className={header}>Organization Setup</h1>
<div className={organizationFormWrapper}>
<TextField
label='Organization Name'
variant='outlined'
name='organizationName'
className={textField}
value={organizationName}
onChange={(event) => handleChange(event)}
/>
<Button
variant='contained'
color='primary'
className={addOrganizationButton}
onClick={(event) => handleOrganizationAdd(event)}
startIcon={<SaveIcon />}
>
Save
</Button>
</div>
</div>
)
}
这是路由器
<div className={container}>
<CustomizedStepper />
<Switch>
<Route
path='/setup-organization'
exact
component={addOrganizationView}
/>
<Route
exact
path='/setup-organization/invite'
component={InvitationPage}
/>
</Switch>
</div>
解决方案
当你使用<Route>
propcomponent
并传递给它一个函数时,你会在每个渲染上创建一个新组件。因此在重新创建该组件时失去焦点。
您要做的是使用render
道具并将其传递给函数。
当你使用组件(而不是渲染或子,下面)时,路由器使用 React.createElement 从给定组件创建一个新的 React 元素。这意味着如果您为 componentprop 提供内联函数,您将在每次渲染时创建一个新组件。这会导致现有组件卸载和新组件安装,而不是仅仅更新现有组件。使用内联函数进行内联渲染时,请使用 render 或 children 道具(如下)。
<Route
path='/setup-organization'
exact
render={addOrganizationView}
/>
推荐阅读
- django - 如何在 django 中为用户权限添加更多功能?
- python - 带有表情符号的文本到透明png
- javascript - 在 Javascript 中仅输出 For in 循环的前 10 个属性
- stata - 用Stata错误类型不匹配r(109)中的数字数据替换字符串;
- linux - avrdude:ser_open():无法打开设备“/dev/ttyACM0”:权限被拒绝,除了没有任何作用
- pytorch - 使变压器 BertForSequenceClassification 初始层不可用于 pytorch 训练
- react-native - 反应原生抽屉
- matlab - 在matlab中读取图像时数组索引必须是正整数或逻辑值
- r - 将文本文件获取到可用的数据框 R
- android - 无法设置按钮更改 state_enabled 的背景颜色