javascript - 我在分派(dispatch)操作之前使用 setState 设置属性,但在分派(dispatch)时的 redux 操作中未设置该属性

标签 javascript reactjs react-redux

我有一个类组件如下,

  class PassengerAddPage extends React.Component {
  state = {
    passenger: {
      flightNumber: "",
      firstName: "",
      lastName: "",
      address: "",
      dob: "",
      passportNumber: ""
    }
  };

我将从用户输入的表单数据中填充所有字段,但 FlightNumber 除外,该字段将从 url 参数“this.props.match.params.flightNumber”中获取。表单的handleSubmit如下,

handleSubmit = event => {
    event.preventDefault();
    console.log(this.props.match.params.flightNumber); //prints AH001
    this.setState(
      {
        ...this.state,
        flightNumber: this.props.match.params.flightNumber
      },
      () => console.log(this.state.passenger) //prints empty
    ); 
    this.props.dispatch(passengerActions.addPassenger(this.state.passenger));
}

即使我设置了 FlightNumber,它在 Redux 存储中仍然显示为空(分派(dispatch)操作后,操作中收到的对象将包含 FlightNumber 属性的空值)。

请帮忙。我是 ReactJS 和 JS 的新手。

最佳答案

原因可能是:

it will still show as empty in the Redux store

1) 您正在使用 this.setState 来设置状态,这会设置组件的本地状态,而不是 Redux 中的全局状态。

2) 您立即尝试获取 flightNumber 但它不会设置,因为 setState 是异步调用。

1) 的解决方案:

更改 redux 存储中状态的唯一方法是使用您想要更改的数据调度一个操作。例如:

handleSubmit = event => {
event.preventDefault();
this.props.dispatch({type: CHANGE_FLIGHT_NUMBER, flightNumber: flightNumber: this.props.match.params.flightNumber})
}

在 reducer 中:

case CHANGE_FLIGHT_NUMBER:
     return {...state, flightNumber: action.flightNumber}

2)的解决方案:

将回调传递给setState:

this.setState(
  {
    passenger: {...this.state.passenger, flightNumber: this.props.match.params.flightNumber}
  },
  () => {
     console.log(this.state.passenger)
  }
)

撰写此答案时所做的假设:

1) 您将状态作为 (state = initialState, action) 传递给您的 reducer 函数。

2) 在您的商店中存在名为 flightNumber 的状态。

关于javascript - 我在分派(dispatch)操作之前使用 setState 设置属性,但在分派(dispatch)时的 redux 操作中未设置该属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60483710/

相关文章:

reactjs - 类型 'typeof test' 的参数不可分配给类型 'Component<{ children?: ReactNode; } & DispatchProp<any>>' 的参数

javascript - Google Analytics 出站链接事件跟踪

php - 我的页面受到 xss 攻击,但 ftp 上的所有文件都没有更改?

javascript - 任何人都知道在ReactJS中编写此代码的简便方法

javascript - 从用户信息返回一个值并将其显示在输入中

javascript - 如何在ReactJS中更新Reducer中的redux状态?

javascript - 用户收到超过 1 个来自 Node.js 的通知

javascript - 无法在 FB.api 方法中声明任何内容

reactjs - Webpack css-loader 失败 : "You may need an appropriate loader to handle this file type."

react js;使用 ESLint 规则解构 props 分配