Reactjs react/redux环境中的POST请求-如何将返回的“\u id”重定向
my react表单组件的Reactjs react/redux环境中的POST请求-如何将返回的“\u id”重定向,reactjs,react-redux,react-router-redux,redux-saga,Reactjs,React Redux,React Router Redux,Redux Saga,my react表单组件的formSubmit部分如下所示: handleFormSubmission = (e) => { if (e) e.preventDefault() const { showErrors, validationErrors, ...formData } = this.state const { submitForm, router } = this.props const errors = run(formData, fieldValidatio
formSubmit
部分如下所示:
handleFormSubmission = (e) => {
if (e) e.preventDefault()
const { showErrors, validationErrors, ...formData } = this.state
const { submitForm, router } = this.props
const errors = run(formData, fieldValidations)
let newState = update(this.state, {
validationErrors: { $set: errors }
})
this.setState(newState, () => {
if (isEmpty(this.state.validationErrors)) {
// submitForm is an dispatches a redux action
submitForm( formData )
if (formData._id) {
// the below is good on a PUT request
router.push(`/accounts/lodgedocket/${formData._id}`)
} else router.push(`/accounts/lodge`)
// with the else above I have no _id to redirect to
} else this.matterno.focus()
})
submitForm
是一种发送redux操作的方法,然后由redux saga执行take
n
const { payload } = yield take( constants.SUBMIT_LODGE_FORM )
问题是,在POST请求成功完成后,我不知道如何获取新的\u id
。url是否应该在操作文件或组件中重新定向
也许是这样的情况,我应该从操作中推送url,但我也无法理解这一点
我正在使用reactjs、redux、react-redux和react-redux路由器
谢谢您应该再添加一些代码。无论如何,它看起来不像真正的惯用redux
如果你在做Ajax调用,你应该有一个中间件,比如redux thunk。它将在Ajax回调中调度一个操作。该操作将包含服务器响应,并由还原程序处理。您将获得一个id为的新状态,因此一个新的组件渲染将在props中获得它
更新:
由于您使用的是redux saga中间件,因此只需在saga Ajax回调中执行对react router redux action creator的调用即可。文件在此:
请确保为路由器中间件从react router导入browserHistory
import { browserHistory } from 'react-router'
const middleware = routerMiddleware(browserHistory)
问题实际上是从哪里发送更改url的操作。答案来自乔治·博齐奥的回答,然后:
-是更改url的三种方法
具体来说,我使用了来自“react router redux”的import{push}
但是我遇到了一个关于如何配置中间件的问题,这个链接为我解决了这个问题:
谢谢你的评论。xhr请求通过redux saga发送。这是使用返回的新id重定向的地方,我无法理解。您可以在提交表单有效负载中传递redux路由器操作,并在Ajax调用响应后从saga中发送。或者直接从saga中发送push()。