Как видно here Я стараюсь как можно больше разделить компоненты моего приложения и не сообщать им о каком-либо создателе хранилища или действия.Развязывающие компоненты React и Redux Connect
Цель состоит в том, чтобы заставить их управлять своим состоянием и функциями вызова, чтобы испустить изменения. Мне сказали, что вы делаете это с помощью реквизита.
Учитывая
// Menu.jsx
import React from 'react'
import { className } from './menu.scss'
import Search from 'components/search'
class Menu extends React.Component {
render() {
return (
<div className={className}>
<a href='#/'>Home</a>
<a href='#/foo'>foo</a>
<a href='#/bar'>bar</a>
<Search />
</div>
)
}
}
И
// Search.jsx
import React from 'react'
import { className } from './search.scss'
class Search extends React.Component {
render() {
let { searchTerm, onSearch } = this.props
return (
<div className={`search ${className}`}>
<p>{searchTerm}</p>
<input
type='search'
onChange={(e) => onSearch(e.target.value)}
value={searchTerm}
/>
</div>
)
}
}
Search.propTypes = {
searchTerm: React.PropTypes.string,
onSearch: React.PropTypes.function
}
export default Search
И чтение here я вижу умный использование Provider
и connect
и моей реализации будет выглядеть примерно так:
import { bindActionCreators, connect } from 'redux'
import actions from 'actions'
function mapStateToProps (state) {
return {
searchTerm: state.searchTerm
}
}
function mapDispatchToProps (dispatch) {
return bindActionCreators({
dispatchSearchAction: actions.search
}, dispatch)
}
export default connect(mapStateToProps, mapDispatchToProps)(Search)
Если предположить, что иметь складскую обработку searchTerm
как часть глобального государства.
Проблема в том, где принадлежит этот код? Если я поставлю его в Search.jsx
, я буду сочетать действия с компонентом и более важным для redux
.
Возможно, у меня две разные версии моего компонента, одна развязана и одна connect()
ed и есть <Menu />
, чтобы использовать ее? Если да, то каким будет выглядеть дерево файлов? Один файл на один компонент или вроде make-all-connected.js
?
Спасибо, хотя, вообще говоря, это правильно, я был бы признателен, если бы вы могли добавить http://rackt.org/redux/docs/basics/UsageWithReact.html в ответ, тогда я отметю его как правильно – kilianc
У меня проблемы. Добавлен. –