Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для AlexKOR5
50 / 14 / 3
Регистрация: 15.02.2019
Сообщений: 514

Компоненты не перерисовываются после изменения состояния Redux

09.09.2021, 10:43. Показов 1388. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я пытаюсь составить список дел. Я взял UI из примера Redux и начал писать логику по-своему. Я столкнулся с проблемой. Итак, проблема в том, что когда я нажимаю кнопку «Mark All Completed», все мои галочки на to dos не отображаются в пользовательском интерфейсе, но состояние обновляется, что отлично видно в Redux Dev Tool. Помогите, пожалуйста, разобраться в чем дело.

gitHub:https://github.com/Alexander-K... 3869f7247d

Здесь я отправляю действие. (src/features/footer/Footer.js )
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import React from 'react';
import {useDispatch} from "react-redux";
import {markAllCompleted} from "../actions";
 
 
const Footer = () => {
    const dispatch = useDispatch();
    return (
        <footer className="footer">
            <div className="actions">
                <h5>Actions</h5>
                <button className="button"
                        onClick={() => dispatch(markAllCompleted())}>
                    Mark All Completed
                </button>
                <button className="button">
                    Clear Completed
                </button>
            </div>
 
            <RemainingTodos/>
            <StatusFilter/>
            <ColorFilters/>
        </footer>
    )
}
 
export default Footer
Здесь я выбираю поле Completed нужного объекта и вставляю его в defaultChecked (src/features/todos/TodoListItem.js )
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import React, {useState} from 'react';
import {ReactComponent as TimesSolid} from './times-solid.svg';
import {markCompleted, deleteToDo, addColor} from "../actions";
import {useDispatch, useSelector} from "react-redux";
 
 
const TodoListItem = ({todo}) => {
    const dispatch = useDispatch();
    const {text, id} = todo;
    const completed = useSelector(state => state.todos.find(item => item.id === id).completed);
    const colorNames = useSelector(state => state.filters.filterColors);
    const [innerSelectColor, setInnerSelectColor] = useState("");
 
    console.log(completed);
    console.log("render TodoListItem");
 
    const colorSetter = (e) => {
        dispatch(addColor(id, e.target.value));
        setInnerSelectColor(e.target.value);
    }
 
    return (
        <li>
            <div className="view">
                <div className="segment label">
                    <input className="toggle"
                           type="checkbox"
                           defaultChecked={completed}
                           onClick={() => dispatch(markCompleted(id, completed))}
                    />
                    <div className="todo-text">{text}</div>
                </div>
 
                <div className="segment buttons">
                    <select className="colorPicker"
                            onChange={colorSetter}
                            style={{color: innerSelectColor}}
                    >
                        {colorNames.map((color, index) =>
                            <option key={index} value={color}>{color.toUpperCase()}</option>)}
                    </select>
 
                    <button className="destroy" onClick={() => dispatch(deleteToDo(id))}>
                        <TimesSolid/>
                    </button>
                </div>
            </div>
        </li>
    )
}
 
export default React.memo(TodoListItem);
Часть reducer (src/features/reducerSilces/todosSlice.js)
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
import {initialToDosState} from "../initialState";
import {constants} from "../constants";
import {v4 as uuidv4} from 'uuid';
 
export default function todosReducer(state = initialToDosState, action) {
    switch (action.type) {
        // another cases ...
        case constants.markAllCompleted:
            return state.map(todo => ({...todo, completed: action.payload}));
        default:
            return state;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2021, 10:43
Ответы с готовыми решениями:

После изменения размеров окна функцией MoveWindow, элементы управления не перерисовываются
Всем привет. Если кто знает, то прошу подсказать почему так получается, и как исправить. Прикладываю проект. При нажатии кнопки...

Пререрисовка таблицы после изменения состояния
Доброго времени суток! Есть таблица, в которой есть данные о товаре, которые хранятся в localStorage. При нажатии на крестик...

Redux изменение состояния
Добрый день! Скажите, как можно изменить состояние (initialState)? Можно ли это сделать с помощью .push() или ка-то по-другому? Но при...

1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
14.09.2021, 09:31
AlexKOR5, defaultChecked(аналог defaultValue для select)отрабатывает при начальном состоянии, тебе надо чтобы он прям зависел от него, если это был бы селект, то это value, у чекбокса не помню какое свойство, глянь, либо value либо checked.

Вот нашел пример:
JavaScript
1
2
3
<Form.Item label="Двустворчатая">
  <Checkbox checked={isDouble} onChange={(e)=> dispatch(changeIsDouble(e.target.checked))} />
</Form.Item>
Добавлено через 4 минуты
В таком случае компонент будет контролируемым и будет перерисовываться при изменении данных
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2021, 09:31
Помогаю со студенческими работами здесь

UserControl. Дочерние объекты перерисовываются после OnPaint
Всех с таки наступившим Новым годом и не наступившим Концом света :) Очередной удар головой об механизм отрисовки в .NET. Нужен...

Redux+React. Взаимодействие redux store с сервером
Помогите понять такой момент: Приложение react+redux+ сервер на ноде. Пока не использовал сервер работа redux store была более-менее...

Отслеживание изменения состояния службы
7. Служба отслеживает изменения состояния (приостановка, запуск, остановка) заданной службы и фиксирует их в текстовом файле. - у меня вот...

Redux. Изменение store после удаления элемента
Всем привет. Разбираюсь с работой React и завис с одним моментом. Делаю заметки - отобразить из базы (mongodb), добавить новую,...

Готовые компоненты для save\load состояния программы
Есть ли такие компоненты dll для C#?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru