【问题标题】:Update initialValues in redux-form asyncronously without using redux在不使用 redux 的情况下异步更新 redux-form 中的 initialValues
【发布时间】:2017-03-12 01:12:36
【问题描述】:

文档中的示例仅显示如何使用 redux 状态更新 initialValues(请参阅 http://redux-form.com/6.0.0-alpha.4/examples/initializeFromState/)。我不想使用 redux,因为它对于我正在构建的应用程序来说真的很乱。我宁愿使用组件状态。

我尝试在 redux-form 连接器中使用异步自执行功能,但没有奏效:

ApplicationNewForm = reduxForm({
    form: 'appapp',
    returnRejectedSubmitPromise: true,
    initialValues: (async function() { ... }()),
    handleSubmit
})(ApplicationNewForm)

那没用(那应该很明显,为什么,组件不在乎分配是否是异步的...)...

我还尝试在 async componentDidMount 中进行 api 调用,并使用 this.state 设置我的 <Field />value 属性。

在每种情况下,值似乎都没有进入 redux 存储,因此不要更新字段中的值。

有什么想法吗?

编辑: 解决方案是使用来自 api 调用的数据手动调用 async componentDidMount 中的 this.props.initialize。这确实有效:

async componentDidMount() {
    try {
        const res = await axios.get('/my/user/api/')
        const { data: user } = res

        this.props.initialize({...user})
    } catch(err) {}
}

【问题讨论】:

标签: javascript reactjs redux react-redux redux-form


【解决方案1】:

截至当前版本,v6.5.0initialValues 配置参数takes an object,不是异步函数。这可能会影响您对this.props.initialize() 的调用。您是否看到正在调度 INITIALIZE 操作?

【讨论】:

  • 感谢您的回复。我只是对 async/await 感到困惑,它已被删除,现在我在那里有一个对象。只需按预期使用initialize redux-form 方法和initialValues 即可解决此问题。请在我的帖子中查看编辑,它正在工作,所以也许我应该关闭这个问题。
  • 是的。我想你可以。
【解决方案2】:

我认为问题在于异步调用。 async 函数会立即返回一个 promise(稍后会用结果来实现)。你把这个promise赋值给initialValue,promise解析什么都不做。

docs for ReduxForm 说 initialValues 只能设置一次而无需手动执行 INITIALIZE,所以我怀疑使用 promise(或 redux 状态更新)是否能解决问题,但我自己没有使用或尝试过 ReduxForm,所以我我不确定。

【讨论】:

  • 感谢您澄清异步/等待。我只是在学习发电机等。我找到了一个解决方案,并在我的问题中进行了更新。
猜你喜欢
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2017-12-18
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多