【发布时间】:2018-07-19 09:04:16
【问题描述】:
我正在使用 redux 表单(只是想学习)。和 axios 来获取我的 account 数据并将其填充到表单中。
我已经做了一个沙盒:https://codesandbox.io/s/mzlrv1n988
来自示例:https://redux-form.com/7.3.0/examples/initializefromstate/ 一切似乎都清晰明了。但它与实际应用程序无关:我对代码进行了一些重构,并且我为add && edit 操作提供了顶级组件,它们处理服务器数据和表单数据。我有一个表单组件:它的目标是表单 UI && 验证。
如何使用顶级组件中的数据填充我的表单?
我的意思是EditForm组件中的这部分代码:
getAccount = () =>
axios.get("https://jsonplaceholder.typicode.com/posts/1").then(Account => {
loadAccount(Account);
});
也形成组件:
import React from "react";
import { connect } from "react-redux";
import { Field, reduxForm } from "redux-form";
import { load as loadAccount } from "./account";
const data = {
// used to populate "account" reducer when "Load" is clicked
body: "testtest",
title: "yep!"
};
let AccountForm = props => {
const { handleSubmit, load, pristine, reset, submitting } = props;
return (
<form onSubmit={handleSubmit}>
<div>
<button type="button" onClick={() => load(data)}>
Load Account (example)
</button>
</div>
<div>
<label>body</label>
<div>
<Field name="body" component="input" type="text" placeholder="body" />
</div>
</div>
<div>
<label>title</label>
<div>
<Field
name="title"
component="input"
type="text"
placeholder="title"
/>
</div>
</div>
<div>
<button type="submit" disabled={pristine || submitting}>
Submit
</button>
<button type="button" disabled={pristine || submitting} onClick={reset}>
Undo Changes
</button>
</div>
</form>
);
};
// Decorate with reduxForm(). It will read the initialValues prop provided by connect()
AccountForm = reduxForm({
form: "initializeFromState" // a unique identifier for this form
})(AccountForm);
// You have to connect() to any reducers that you wish to connect to yourself
AccountForm = connect(
state => ({
initialValues: state.account.data // pull initial values from account reducer
}),
{ load: loadAccount } // bind account loading action creator
)(AccountForm);
export default AccountForm;
如果可以在不使用 redux 架构的情况下做到这一点 - 那就更好了,我不需要这里的大部分逻辑......
还有一个小问题:如何在从服务器加载数据时禁用“提交”按钮?
【问题讨论】:
标签: javascript reactjs redux redux-form