【发布时间】:2019-02-27 17:39:53
【问题描述】:
我的项目有 2 个单独的表单,“用户”和“电影”。我创建了一个输入组件,我想在所有 3 种形式中使用它。这不是一件复杂的事情,但我想知道正确的方法是将每次击键或模糊操作的数据保存到正确的 redux 存储状态。
所以我有 2 个 reducer 和 2 个表单,“用户”和“电影”。用户表单只包含一些用户和用户元数据。电影表单将是用户看过的电影的“集合”。
我已经创建了这个文本字段组件
import React from 'react';
class TextField extends React.Component {
constructor(props) {
super(props);
this.state = {
name: this.props.name,
value: this.props.value
}
}
onChange = (e) => {
const {
value
} = e.target
this.setState({
value: value
});
}
onBlur = (e) => {
const {
value
} = e.target
this.setState({
value: value
});
}
render() {
return(
<input
type="text"
name={this.state.name}
value={this.state.value}
onBlur={(e) => this.onBlur(e)}
onChange={(e) => this.onChange(e)}
/>
)
}
}
export default TextField;
在表单组件中
<TextField
name={`${this.state.movies}[${index}].name`}
value={item.name}
/>
不,我需要正确的方法通过 onChange 或 onBlur 将值直接写入正确的“用户”或“电影”状态。例如movies[1].name 应该通过 reducer 附加到电影状态:
movies : [{
name: 'movie #1'
},
name: 'movie #2'
}]
我是否应该通过 props 在每个输入字段上传递一个 onChange 和 onBlur 函数,让 TextField 组件知道如何处理以及将值写入存储的位置?例如
<TextField
name={`${this.state.movies}[${index}].name`}
value={item.name}
onBlur={(event) => console.log('onBlur action')}
onChange={(event) => console.log('onChange action')}
/>
我使用过诸如“redux-form”之类的模块,但感觉很重,不太稳定。我想自己控制一切,因为“电影”表单只是一个没有用户端验证的集合。
【问题讨论】:
标签: javascript reactjs redux