2016-06-06 3 views
0

У меня есть государство с рейсами, и у меня есть ползунок, чтобы изменить максимальную цену, чтобы изменить видимость элементов полета.Изменение состояния изменения в массиве (для цикла)

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} 
      ); 
     }; 
    } 

Этот код добавляет неопределенное поле со статусом истинного в корне состояние, хотя .. я не могу найти лучшие практики по этому вопросу, а затем с помощью другой вычисляемых полей. Но я не могу получить расчетное поле, работающее либо.

Не мог бы кто-нибудь помочь мне здесь?

+0

Вы можете поделиться с данными о вашем состоянии? Я вижу, что ваше состояние является массивом, поэтому попробуйте использовать 'this.setState ({flightOffer [i] .hiddenprice: true});' – iamsaksham

+0

@iamsaksham - это фактически функция из ES6, где вы определяете ключи динамически в определяющем объект. https://babeljs.io/repl/#?evaluate=true&lineWrap=false&presets=es2015%2Creact%2Cstage-0&experimental=true&loose=false&spec=false&playground=false&code=var%20key%20%3D%20'test'%3B%0Avar % 20value% 20% 3D% 20true% 3B% 0A% 0Aconst% 20obj% 20% 3D% 20% 7B% 0A% 20% 20% 5Bkey% 5D% 3A% 20value% 0A% 7D% 3B – agmcleod

ответ

9

Вы не хотите делать вызов setState в цикле, который будет иметь обработчик реагирования несколько раз. Создайте новый объект состояния и вызовите setState один раз. Вы также не хотите, чтобы отфильтровать его от, если заявление, но установить предыдущие значения скрытых:

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); 

    // ... 
} 

Если вы по-прежнему возникают проблемы, это может быть, что свойство hiddenprice не то, что вы ожидаете ? Может потребоваться также отправить функцию render().

+0

Не уверен, что состояние каждый раз в цикле. Не реагирует ли объединение всех вызовов setState() в конце цикла, чтобы вызвать его только один раз? – Pcriulan

+0

А может быть, ты прав. Небольшой jsfiddle использовал переменную count, и она только что зарегистрировала ее один раз. Тем не менее, я думаю, что вызов setState один раз будет менее дорогостоящим, но это приведет к большей оптимизации, а не к функционалу :) https://jsfiddle.net/69z2wepo/44677/ – agmcleod

1

Вместо того, чтобы выполнять цикл, когда вы обновляете состояние, почему бы просто не включить переключатель?

Возможно, вы уже зацикливаете все flightOffers в render(). Так что просто добавьте чек. Внутри вашего рендера пройдите hiddenPrice={offer.price > sliderPrice} в качестве опоры или используйте его прямо там, где вы контролируете видимость.

Почему? Поскольку видимость конкретного элемента в этом случае не является состоянием. Это результат состояния.

 Смежные вопросы

  • Нет связанных вопросов^_^