ReactJs redux 表单:传递给表单的初始值不显示
Posted
技术标签:
【中文标题】ReactJs redux 表单:传递给表单的初始值不显示【英文标题】:ReactJs redux form: initial values passed down to form not displaying 【发布时间】:2019-02-17 03:33:41 【问题描述】:这就是我的项目的样子:
class ParentOfForm extends Component
constructor()this.state=initVals: null;
componentDidMount()
asyncCall.then((values) =>
setState(
initVals:
initval1: valFromAsync,
..
)
);
render()
const initVals = this.state;
!initVals && <Form/>
!!initVals && <Form initialValues=initVals/>
----------------
class Form extends Component
constructor(props)
super(props);
this.state =
initval1: "",
..
render()
return(
<form..>
..
</form>
);
Form = reduxForm(
form: "Form",
validate,
enableReinitialize: true
)(Form);
export default Form;
如您所见,我正在尝试使用来自异步函数的值作为 initialValues 来初始化表单的输入字段。当我在 Form = reduxForm(...) 中定义 initialValues 时,它们会正确显示。但是,当我尝试使用异步调用动态设置它们时,我可以看到值正在更改,但它们似乎都未定义,尽管我可以看到它们被 console.log() 填充。做错了什么?
我不能使用明显的替代方法,原因是:defaultValue, const Form = ().., no parent
【问题讨论】:
我不确定您是否打算显示一些伪代码,但asyncCall.then(setState(...))
部分似乎不正确。你的意思是asyncCall.then((values) => setState(...))
吗?还有initVals=null
应该是initVals: null
另外你正在检查!initValues && <Form/>
,但似乎你的意思是initVals
而不是initValues
一个干净的JS代码会更好地解决这个问题
【参考方案1】:
欢迎来到 SO。
所以发生的事情是因为它是一个异步调用,所以 initValues 不会立即显示在表单中。即使在控制台日志中,它也会在调用完成后显示。因此,在使用空白表单加载页面与使用值完成初始化调用之间存在时间间隔。
有两种处理方法:
-
在表单上显示加载符号并等待异步调用完成并填写初始化值 [UX 推荐] 请参阅 here
在获取 initValues 之前显示一个带有默认值的空表单,并在调用完成时显示它们。 [糟糕的用户体验实践]
【讨论】:
以上是关于ReactJs redux 表单:传递给表单的初始值不显示的主要内容,如果未能解决你的问题,请参考以下文章
reactjs - redux 表单和材质 ui 框架 - 拖放文件上传器
父组件中的 Reactjs 按钮,在子组件中提交 Redux 表单
ReactJS表单应用程序:如何阻止父组件重新渲染? /使用redux共享状态的正确方法