在数组中反应改变状态(for 循环)

React change state in array (for loop)

我有一个有航班的州,我有一个滑块来更改最高价格以更改航班元素的可见性。

maxpriceFilter() {

    var flightOffer = this.state.flightOffer;
    var sliderPrice = this.state.sliderPrice;

    for (var i = 0; i < flightOffer.length; i++) {
        if( flightOffer[i].price > sliderPrice) {   

            this.setState(
                {[flightOffer[i].hiddenprice] : true}
            );
        };
    }

这段代码在状态的根中添加了一个状态为 true 的未定义字段。除了使用计算字段之外,我找不到任何关于此的最佳实践。但是我也无法让计算域工作..

有人可以帮我吗?

与其在更新状态时进行循环,不如在渲染时进行切换?

您可能已经遍历了 render() 中的所有 flightOffers。所以,只需在那里添加支票。在你的渲染中,将 hiddenPrice={offer.price > sliderPrice} 作为道具传递,或者直接在你控制可见性的地方使用它。

为什么?因为在这种情况下特定项目的可见性不是状态。是状态的结果。

您不想在循环中执行 setState 调用,这会使反应组件渲染多次。构建一个新的状态对象并调用一次 setState。您也不想通过 if 语句将其过滤掉,而是将以前的值设置为隐藏:

maxpriceFilter() {

    var flightOffer = this.state.flightOffer;
    var sliderPrice = this.state.sliderPrice;
    var newState = {};

    for (var i = 0; i < flightOffer.length; i++) {
        newState[flightOffer[i].hiddenprice] = flightOffer[i].price > sliderPrice;
    }

    this.setState(newState);

    // ...
}

如果您仍然遇到问题,可能是隐藏价格 属性 不是您所期望的?可能还需要 post 您的 render() 函数。