将 redux-form 库 initialValue 注入 <Field>
Getting redux-form library initialValue injected into <Field>
我正在构建一个 EDIT 表单,最终用户可以在其中查看之前提交的数据,对其进行更改并将其保存回数据库。
问题是在输入字段中显示以前的数据。该表单是使用 redux-form (here the library) 构建的,它使用 <Field>
个组件。
目前流程如下:
获取数据并发送
此代码将已保存在数据库中的数据发送到 reducer
React.useEffect(() => {
axios.get(`${API.BASE_URL}${API.VIEW_STORES}/${params.storesid}`)
.then(({data}) => {
dispatch(editStoreFields(data))
})
}, [dispatch, params.storesid])
减速器
export default function (state = [], action) {
switch (action.type) {
case EDIT_STORE_FIELDS:
return {
...state,
myStore: action.data,
}
default:
return state;
}
}
现在我将代码发送到 reducer,通过 mapStateToProps 传递它
class UsersForm extends Component {
render() {
const {
handleSubmit, pristine, reset, submitting, t, myStore
} = this.props;
if(myStore === undefined) {
return false
}
return (
<form className="form" onSubmit={handleSubmit}>
<div className="form__form-group">
<span className="form__form-group-label">MY BUSINESS</span>
<div className="form__form-group-field">
<Field
name="businessname"
component={renderField}
type="text"
>>>>> ISSUE IS HERE <===== I need to inject the value of myStore.businessname in here, but I can't figure that out.
/>
</div>
</div>
<ButtonToolbar className="form__button-toolbar">
<Button color="primary" type="submit">SAVE</Button>
</ButtonToolbar>
</form>
);
}
}
const mapStateToProps = (state) => {
return {
myStore: state.storeReducer.myStore
}
}
export default reduxForm({
form: 'vertical_form_validation', // a unique identifier for this form
validate,
enableReinitialize : true
}, mapStateToProps)(transHook(UsersForm));
Redux 存储值:
storeReducer:
myStore:
_id(pin):"610d12a52afdd35d4f2456a1"
businessname(pin):"qeqe"
通过 mapState 返回的 MyStore 值...
{
_id:"610d12a52afdd35d4f2456a1"
businessname:"qeqe"
}
因此,如您所见,将数据从 API GET 调用传递给 props 的路由绝对没问题,但我找不到将 props 传递给 [=16= 的方法] 并将其显示为用户可以更改并重新提交的文本。
非常感谢任何帮助。请注意,您需要了解 redux-form 库的工作原理才能提出解决方案。
谢谢乔
更新:
我找到了解决方案。
第一名:
<Field
name="businessname"
component={renderField}
type="text"
/>
这里不需要任何东西。具有 initialValues
的函数 mapStateToProps 将自动使用字段的 name
并分配正确的值。
这里是主要部分:
const mapStateToProps = (state) => ({
initialValues: state.storeReducer.myStore
})
myStore
已经是一个对象,其中包含与字段名称匹配的所有键。使用此语法,我可以自动为 HTML 中的所有字段填充正确的数据,这些数据可以更改并重新提交。
在顶部,为了保持所有内联,调用 IF 语句的 initialValues
道具:
const {
handleSubmit, pristine, reset, submitting, t, initialValues
} = this.props;
if(initialValues === undefined) {
return false
}
这不是解决问题所必需的,但我想做个说明,以防你们遵循此代码。
我正在构建一个 EDIT 表单,最终用户可以在其中查看之前提交的数据,对其进行更改并将其保存回数据库。
问题是在输入字段中显示以前的数据。该表单是使用 redux-form (here the library) 构建的,它使用 <Field>
个组件。
目前流程如下:
获取数据并发送 此代码将已保存在数据库中的数据发送到 reducer
React.useEffect(() => {
axios.get(`${API.BASE_URL}${API.VIEW_STORES}/${params.storesid}`)
.then(({data}) => {
dispatch(editStoreFields(data))
})
}, [dispatch, params.storesid])
减速器
export default function (state = [], action) {
switch (action.type) {
case EDIT_STORE_FIELDS:
return {
...state,
myStore: action.data,
}
default:
return state;
}
}
现在我将代码发送到 reducer,通过 mapStateToProps 传递它
class UsersForm extends Component {
render() {
const {
handleSubmit, pristine, reset, submitting, t, myStore
} = this.props;
if(myStore === undefined) {
return false
}
return (
<form className="form" onSubmit={handleSubmit}>
<div className="form__form-group">
<span className="form__form-group-label">MY BUSINESS</span>
<div className="form__form-group-field">
<Field
name="businessname"
component={renderField}
type="text"
>>>>> ISSUE IS HERE <===== I need to inject the value of myStore.businessname in here, but I can't figure that out.
/>
</div>
</div>
<ButtonToolbar className="form__button-toolbar">
<Button color="primary" type="submit">SAVE</Button>
</ButtonToolbar>
</form>
);
}
}
const mapStateToProps = (state) => {
return {
myStore: state.storeReducer.myStore
}
}
export default reduxForm({
form: 'vertical_form_validation', // a unique identifier for this form
validate,
enableReinitialize : true
}, mapStateToProps)(transHook(UsersForm));
Redux 存储值:
storeReducer:
myStore:
_id(pin):"610d12a52afdd35d4f2456a1"
businessname(pin):"qeqe"
通过 mapState 返回的 MyStore 值...
{
_id:"610d12a52afdd35d4f2456a1"
businessname:"qeqe"
}
因此,如您所见,将数据从 API GET 调用传递给 props 的路由绝对没问题,但我找不到将 props 传递给 [=16= 的方法] 并将其显示为用户可以更改并重新提交的文本。
非常感谢任何帮助。请注意,您需要了解 redux-form 库的工作原理才能提出解决方案。
谢谢乔
更新: 我找到了解决方案。
第一名:
<Field
name="businessname"
component={renderField}
type="text"
/>
这里不需要任何东西。具有 initialValues
的函数 mapStateToProps 将自动使用字段的 name
并分配正确的值。
这里是主要部分:
const mapStateToProps = (state) => ({
initialValues: state.storeReducer.myStore
})
myStore
已经是一个对象,其中包含与字段名称匹配的所有键。使用此语法,我可以自动为 HTML 中的所有字段填充正确的数据,这些数据可以更改并重新提交。
在顶部,为了保持所有内联,调用 IF 语句的 initialValues
道具:
const {
handleSubmit, pristine, reset, submitting, t, initialValues
} = this.props;
if(initialValues === undefined) {
return false
}
这不是解决问题所必需的,但我想做个说明,以防你们遵循此代码。