Redux 表单:是否可以访问 formReducer
Redux Form: Is it possible to access formReducer
我一直在尝试的是从容器组件中的 formReducer
获取值。
有两个组件。一个是 Redux-Form
.
的演示组件
class Form extends React.Component {
render() {
return (
<div>
<form onSubmit={handleSubmit}>
<Field name="title"
component="input"
type="text"/>
</form>
</div>
)
}
}
Form = reduxForm({
form: 'PostEditor',
enableReinitialize: true,
})(Form);
Form = connect(
state => ({
initialValues: state.post.post,
enableReinitialize: true,
}),
)(Form)
export default Form;
另一个是它的容器,这是我想访问的地方 formReducer
。
class PostEditor extends React.Component {
render() {
console.log("form", this.props.PostEditor);//This results in "undefined"
return (<Form onSubmit={data=> this.handleSubmit(data)}/>);
}
}
const mapStateToProps = (state) => {
return {
PostEditor: state.form
}
}
export default connect(mapStateToProps, null)(PostEditor);
在 Redux 的 store 中,form reducer 设置为 state.form
,但无法访问。
是否可以从 reducer 获取值?
尝试使用 ReduxForm 选择器之一。
import { getFormValues } from 'redux-form';
const mapStateToProps = (state) => {
return {
PostEditor: getFormValues('PostEditor')(state)
}
}
这里有详细的文档:https://redux-form.com/7.2.0/docs/api/selectors.md/
要访问表单的值,请从 redux-form 导入以下选择器
import { formValueSelector } from 'redux-form';
然后使用您希望在 mapStateToProps 中检索值的表单名称调用该函数。
这将 return 一个函数,然后使用 Redux 存储的状态以及我们希望获取值的字段的名称调用该函数。
const mapStateToProps = (state) => {
return {
titleFieldValue: formValueSelector('PostEditor')(state, 'title')
}
}
如果我们希望检索多个字段,我们还可以向该函数调用添加更多参数。例如
formValueSelector('PostEditor')(state, 'title', 'name', 'otherField')
以下语法是 "curried" 函数的示例。这只是 return 其他函数的名称。如果您有兴趣,请阅读 this 以了解柯里化的介绍。
我一直在尝试的是从容器组件中的 formReducer
获取值。
有两个组件。一个是 Redux-Form
.
class Form extends React.Component {
render() {
return (
<div>
<form onSubmit={handleSubmit}>
<Field name="title"
component="input"
type="text"/>
</form>
</div>
)
}
}
Form = reduxForm({
form: 'PostEditor',
enableReinitialize: true,
})(Form);
Form = connect(
state => ({
initialValues: state.post.post,
enableReinitialize: true,
}),
)(Form)
export default Form;
另一个是它的容器,这是我想访问的地方 formReducer
。
class PostEditor extends React.Component {
render() {
console.log("form", this.props.PostEditor);//This results in "undefined"
return (<Form onSubmit={data=> this.handleSubmit(data)}/>);
}
}
const mapStateToProps = (state) => {
return {
PostEditor: state.form
}
}
export default connect(mapStateToProps, null)(PostEditor);
在 Redux 的 store 中,form reducer 设置为 state.form
,但无法访问。
是否可以从 reducer 获取值?
尝试使用 ReduxForm 选择器之一。
import { getFormValues } from 'redux-form';
const mapStateToProps = (state) => {
return {
PostEditor: getFormValues('PostEditor')(state)
}
}
这里有详细的文档:https://redux-form.com/7.2.0/docs/api/selectors.md/
要访问表单的值,请从 redux-form 导入以下选择器
import { formValueSelector } from 'redux-form';
然后使用您希望在 mapStateToProps 中检索值的表单名称调用该函数。
这将 return 一个函数,然后使用 Redux 存储的状态以及我们希望获取值的字段的名称调用该函数。
const mapStateToProps = (state) => {
return {
titleFieldValue: formValueSelector('PostEditor')(state, 'title')
}
}
如果我们希望检索多个字段,我们还可以向该函数调用添加更多参数。例如
formValueSelector('PostEditor')(state, 'title', 'name', 'otherField')
以下语法是 "curried" 函数的示例。这只是 return 其他函数的名称。如果您有兴趣,请阅读 this 以了解柯里化的介绍。