Pull to refresh

Comments 8

Отличная работа! Есть чем заняться на выходных)
К сожалению, уже не актуально для меня. Через тернистый путь, как-то изучил эту библиотеку. Но, в любом случае спасибо за Ваши труды. Особенно за первую часть.
Большое спасибо за книгу, но есть вопрос-замечание:

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

Потому что например у меня есть проект на чистом реакте, и я хочу перевести его на редакс:

В состоянии есть свойство data, содержащее обычные табличные строки с данными, то есть массив объектов, и есть свойство dataStructure, где эти данные представлены иерархически с группировками, нужной сортировкой и рассчитанными итогами по колонкам…

И вот в моем проекте есть функция changeDataValue(row, column, newValue), куда передается строка, что уже неудобно, потому что сделав копию мне придется найти эту строку в копии

Хорошо, я проиндексирую строки и пишу

const {data} = [...this.state] //скопировали
row = data[row.index] //Нашли нужную строку в копии
row[column.path] = newValue //Установили значение


но теперь мне нужно пересчитать итоги по группировке, группировка находится в row.parent и ссылается это свойство на строку из dataStructure, то есть после
row.parent[column.path] += newValue - oldValue


получается измененным свойство dataStructure, И здесь возникает вопрос на что это может повлиять. Копировать dataStructure с его двусторонними связями children и parent как-то не очень хочется. Это может быть и долго на тысячах строк данных и муторно алгоритмически и не очень понятно зачем.

PS И замените пожалуйста «так же» на «также», потому что в том контексте, в котором это используется в книге, нужно писать слитно. «Также» — тоже, кроме того, «Так же» — таким же образом. Когда вы пишете «Мы изменили page.js, так же изменим App.js» это означает, что в App.js нужно внести изменения аналогичные изменениям page.js, что противоречит контексту. Я не грамма-наци, когда это встречается в статьях — легко пропускаешь мимо глаз, но в книге это бросается в глаза.

Если я правильно понял ваш комментарий, то менять state нельзя по причине того, что это «3rd Redux principle» — нельзя изменять данные напрямую, вашему store нужно передавать новое состояние, полностью, даже если мы добавили в список просто новый элемент в конец, то мы должны передать новый список, который имеет вид "(… элемент_1, элемент_2, новый_элемент)".
Говоря простым языком, если не возвращать «новый объект» — то компонент не будет перерисован, так как «redux» не поймет, что его нужно перерисовать.
Отличный ответ. Чаще на этот вопрос начинают разводить турусы на колесах про глубинный смысл, функицональный подход и чистоту объектов. С ужасом думаю как отвечать на такой вопрос при случае на собеседовании.
Я понимаю, я просто обратил внимание на то, что из книги это не очевидно. Там просто нельзя и все тут, что как мне кажется не очень педагогично.
Sign up to leave a comment.

Articles