【问题标题】:react-redux current props valuereact-redux 当前道具值
【发布时间】:2021-02-28 06:30:53
【问题描述】:

我在页面上有三个按钮,当单击任何按钮时,我想从按 id 过滤的商店中获取所选值(在 reducer 中完成)。我正在尝试将 redux 与 mapStateToProps 和 mapDispatchToProps 模式一起使用,但看起来当我在单击任何按钮后尝试从商店访问当前选定的值时,它不会在控制台中反映正确的值。这不是如何使用“this.props.anyPropValue”吗?你能帮助澄清我的例子中有什么问题吗? 第一次单击任何按钮时打印默认值,再次单击将打印先前单击的按钮值而不是当前值。

这是我为上面创建的简单应用程序的沙盒链接

sandbox link of the code

【问题讨论】:

  • 似乎它在沙盒示例中工作。
  • @SahanPasinduNirmal 不,不是,如果您在沙箱中看到控制台,假设单击第一个按钮,它将打印“默认”这是错误的,它应该打印第一个按钮的值等等

标签: reactjs react-redux react-props mapstatetoprops mapdispatchtoprops


【解决方案1】:

您编写的大部分代码都是正确的,如果您希望在调用操作后立即看到更新的输出,那将无法正常工作

onGetCountryById(id) {
    this.props.fetchCountryById(id);
    console.log(this.props.country); // This will gives you the current country (We just update the state, but still that value didn't update the component)
}

尝试在下面的 html 中打印国家/地区的值,您会看到它正在更新

{this.props.country === null ? "default" : this.props.country.name}

在reducer中你可能需要做这个改变

case CountryActions.FETCH_COUNTRY_BY_ID:
    return {
        ...state,
        country: state.countries.find((item) => item.id === action.id) // use find instead of filter
    };

并将国家的初始值设置为null

const initCountriesState = {
    country: null,
    countries: [
        ....
    ]
};

这是更新后的sandbox

【讨论】:

  • 感谢您指出 html 正在更新,太好了!但是正如您所提到的,如果期望道具的更新值,那是不可能的吗?那么我应该如何在我的点击函数中获得更新的值呢?
  • 您是否检查过我附加的沙箱,如果您在操作后立即执行console.log,它不会为您提供最新结果,状态将被更新可能在下一个执行周期(更新状态是异步的reactjs.org/docs/…),并且你的组件很快就会收到最新的状态,这就是为什么你在点击后立即在浏览器中看到最新的结果而没有看到任何明显的延迟
  • 我确实检查了您附加的最新沙箱,当我单击按钮时,控制台日志首先打印 null,如果我再次单击任何按钮,则它会打印先前单击的按钮值,我希望的是当我点击任何按钮时,一种立即获取价值的方法,这可能吗?
  • 我想我知道 prop,它不会立即为您提供更新的值,但我认为 prop 会提供该值,因为它存储在全局存储中?
  • 首先为什么你需要“当我点击任何按钮时立即价值”?并且没有状态会异步更新意味着它不会很快更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2016-12-14
  • 2018-02-03
  • 2018-06-28
  • 2017-11-21
相关资源
最近更新 更多