Является ли хорошей практика использовать connect действительно часто?
Доброго дня.
Есть два кейса.
1. Много компонентов, в которых много суб-компонентов, которые требуют доступ к state. На начальном этапе спускал state в props от верхних приконнекченных компонентов, сейчас же вижу более удобным не засорять props прямыми зависимостями (компонент не будет работать без state), а делать 80-90% этих суб-компонентов приконнекченными, разумеется, без фанатизма.
2. Есть свойство, хранится в state, которое пользует половина приложения. Это роль пользователя в системе, на ее основе компоненты решают, какую разметку \ компонент отдать. Часто компоненту нужна только эта роль, поэтому передаю ее в props. Но я не вижу props хорошим местом для зависимостей компонента, это скорее место для параметров. Можно использовать connect для всей половины приложения, однако я придумал и альтернативное решение: написать функцию (или класс с методами), которая бы имела доступ к store сама по себе. Вызывая эту функцию в любом месте приложения, не приконнекченный компонент будет получать актуальные данные из state.
Что думаете по каждому вопросу? Хороша ли вообще практика частого использования connect, или лучше стремиться держать приконнекченными несколько ключевых компонент, а в более мелких все-таки юзать props, контекст или описанную во втором пункте функцию?
раньше я был преверженцем того что я в проектах разделял компоненты на контейнер в котором происходил коннект а дальше пропсы передавались в компоненты и в суб компоненты. Но со временем проект разрастался и получалось что некоторые контейнеры разрастались до таких страшных маштабов что найти что ли составляла больших усилий. Со временем коннект переместился в компоненты и суб компоненты как вы описываете. Как показала практика компненты стали не на много больше но код стал читабельнее и удобнее.
Вообще, вся эта история с умными/глупыми компонентами, - о том как эти самые компоненты переиспользовать. Правило левой руки такое: если код зависит от внешнего состояния, то такой код становится сложно переиспользовать. Это относится не только к компонентам, но и к любому коду. connect добавляет зависимость от внешнего состояния, поэтому компонент, завязанный на connect преиспользовать и сложно.
Но вполне нормально юзать connect на любых компонентах. И, если коннект затрудняет переиспользование какого-то конкретного компонента, то всегда можно отвязаться от connect'a и передавать пропсы напрямую из компонента-родителя. Эдакий способ разработки снизу-вверх.
однако я придумал и альтернативное решение: написать функцию (или класс с методами), которая бы имела доступ к store сама по себе. Вызывая эту функцию в любом месте приложения, не приконнекченный компонент будет получать актуальные данные из state.