реагировать на избыточность, не обновляя вид - PullRequest
0 голосов
/ 24 сентября 2019

мое представление теперь обновляется при изменении состояния избыточности, но если я нажимаю кнопку «toggleToDoReducer», представление обновляется до нового состояния.вот мой код

const toggleToDoReducer = (state, payload) => {
  return ({
    ...state,
    items: state.items.map((item, index) => {
      if (index === payload) {
        return { text: item.text, isChecked: !item.isChecked }
      }

      return item
    })
  })
}

shuffleMe = (oldData) => {
  let i, j, temp;
  for (i = oldData.length - 1; i > 0; i--) {
    j = Math.floor(Math.random() * (i + 1));
    temp = oldData[i];
    oldData[i] = oldData[j];
    oldData[j] = temp;
  }
  let newArray = oldData;
  return (newArray)
}

const shuffleReducer = (state) => {
  return ({
    ...state,
    items: shuffleMe(state.items)
  })
}

любая помощь будет принята с благодарностью

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Попробуйте использовать функцию setState({}) для повторного рендеринга вашего вида.

0 голосов
/ 24 сентября 2019

Я думаю, что функция shuffleMe напрямую изменяет состояние.Скорее передайте копию состояния.Пример реализации ниже

const toggleToDoReducer = (state, payload) => {
  return {
    ...state,
    items: state.items.map((item, index) => {
      if (index === payload) {
        return { text: item.text, isChecked: !item.isChecked };
      }

      return item;
    })
  };
};

const shuffleMe = oldData => {   
    oldData.forEach((element, i) => {
    const j = Math.floor(Math.random() * (i + 1));
    [oldData[i], oldData[j]] = [oldData[j], oldData[i]];     
    });
  return oldData;
};

const shuffleReducer = state => {
  return {
    ...state,
    items: shuffleMe([...state.items])
  };
};
...