1.
React.StrictMode
отсутствует.
2. Не понятно, для чего Вы в
App
подписываетесь на изменения
store
и обновляете состояние им.
3. Все файлы компонентов названы с маленькой буквы, а лучше бы с заглавной.
4. Все стили описаны в файле
src/style.css
, а надо бы для каждого компонента их разделять. Я бы разбивал на
модули.
5. Расширение
.jsx
используйте только для компонентов. У Вас есть файлы с логикой, которые имеют такое расширение.
6. Чтобы не передавать Redux-хранилище по цепочке в другие компоненты используется функция
connect.
7. Значение о том, какой тип сущностей и фильтр по ним (
important или
не important;
filter), лучше вынести в Redux, или композицией в родительский компонент.
8. В
sirch-panel.jsx
(а еще лучше бы
SearchPanel.jsx
) лучше хранить состоянием только значение поля для новой сущности.
9. События Redux - считаю, что лучше константы вынести в отдельный файл (
action types), а сами события оформить без
store.dispatch
. Диспатчинг событий можно перенести в тот же
connect (можно даже
bindActionCreators использовать).
10. Reducer - даже если событие не данного reducer'а, то Вы возвращаете новое состояния. Лучше перенести код по модификации состояния в сам
switch
. Для удаления можете воспользоваться методом массива
.filter
. Для пометки
important можете воспользоваться методом массива
.map
. И вообще его вынести в отдельную директорию, т. к. он не является компонентом (как и
action creators).
11. Чтобы не писать такие конструкции:
className={important ? "important list-item" : "list-item"}
можете воспользоваться
classnames или
clsx.
12. Почитайте про
useCallback. Некоторые обработчики различных события можно улучшить при помощи данного хука.
13. Вы используете разные способы экспорта компонентов:
default export и
named export. Наверное, чтобы в дальнейшем не путаться, следует использовать какой-то один вариант.
14. Нет сохранения данных между сессиями. Воспользуйтесь для начала
localStorage.
15. Если будете использовать сохранение данных, то у Вас появится проблема с ID сущностей.
id: idCounter
можно будет заменить на
Date.now()
.