Написание более коротких контейнеров React-Redux
Если вы весь день пишете код response + redux, скорее всего, ваши пальцы привыкли печатать этот шаблон mapStateToProps
, mapDispatchToProps
и connect
:
Ничего страшного. Функции можно использовать повторно, все просто, что не нравится?
В качестве эксперимента я написал это и в итоге сохранил его, потому что это сделало шаблон более лаконичным:
import {connect} from 'react-redux' const reduxify = (container) => connect( container.mapStateToProps, container.mapDispatchToProps, )(container.render)
Все, что мы делаем, - это передаем функции mapStateToProps
, mapDispatchToProps
и render
вместе за один раз вместо использования двухэтапного последовательного вызова функции.
Вот новый, более короткий синтаксис, который использует функцию reduxify
для создания «контейнера»:
Примерно ~ 9 строк шаблона превращается в ~ 6 строк, но, что более важно, это не снижает хороших качеств оригинала: тестируемость и простое повторное использование функций.
Тестирование и повторное использование
Может быть, вы хотите повторно использовать mapStateToProps
более чем в одном месте или хотите провести модульное тестирование, не волнуйтесь!
Это просто функции, вы можете определять их где угодно, импортировать и вставлять в reduxify
. Сокращение значения свойства объекта позволяет ему оставаться ясным и лаконичным.
import {mapStateToProps} from './other-component.js' const Component = reduxify({ mapStateToProps, render: (props) => <div>...</div> })
Вот пример mapStateToProps
, определенного вне вызова reduxify:
Полезный читатель заметил, что mapDispatchToProps
даже не обязательно должна быть функцией, если вы используете средства создания действий:
Загрузите библиотеку reduxify
Ха-ха, шучу, я не собираюсь давать вам npm
пакет для 6-строчной функции, просто скопируйте / вставьте его :)