このように、here私は可能な限りアプリケーションのコンポーネントをデカップリングして、ストレージやアクション作成者に気付かないようにしています。リアクションコンポーネントとRedux接続のデカップリング
目的は、自分の状態を管理し、変更を発行する関数を呼び出させることです。私はあなたが小道具を使ってこれをすると言われました。
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)
Iと仮定すると:
// 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
を考えると、このようになり、私はProvider
とconnect
、私の実装のスマートな使用を参照してくださいhereを読ん
店舗扱いを持っていますsearchTerm
をグローバル状態の一部として使用します。
問題は、このコードはどこに属していますか?私がSearch.jsx
に入れたら、コンポーネントとアクションを結合し、より重要なのはredux
です。
私のコンポーネントの2つの異なるバージョンがあると思いますが、1つはデカップリングされ、もう1つはconnect()
であり、それを使用するには<Menu />
がありますか?はいの場合、私のファイルツリーはどのように見えますか?コンポーネントごとに1つのファイル、またはmake-all-connected.js
?
ありがとう、一般的に言えばこれは間違いありません。http://rackt.org/redux/docs/basics/UsageWithReact.htmlを回答に追加していただければ幸いです。私はそれを正しいとマークします – kilianc
問題がある。追加されました。 –