私はMeteor/Reactを使用しています。私はTasksを購読しているTaskコンポーネントのメインコンテナを持っています。子コンポーネントでは、タスクを表示しますが、タスク(createdAt、Nameなど)をソートするためのドロップダウンリストを持っています。Meteor/React、CreateContainerと子コンポーネントを介して状態を渡すか?
私はこれをSessionとBlazeで使いましたが、私はReactを使っていて、同じことをしていないようです。ソート作業リストをどのように反応させるかわからない。今私がしようとしていることは(それが良い方法かどうかわからない)Appコンポーネントで状態を設定し、それをコンテナと子に送信することです。
AppClass命令
constructor(props){
super(props);
this.state = this.getMeteorData();
this.sortTasks = this.sortTasks.bind(this);
}
getMeteorData(){
return {
sorting: { createdAt: -1 },
};
}
sortTasks(sorting) {
this.setState({ sorting: sorting });
}
render(){
const childrenWithProps = React.Children.map(this.props.children, (child) =>
React.cloneElement(child, {
sorting: this.state.sorting,
sortTasks: this.sortTasks.bind(this),
})
);
return <div>{childrenWithProps}</div>
}
コンテナ
export default TodosContainer = createContainer(({props}) => {
Meteor.subscribe('tasks');
return {
tasks: Tasks.find({}, { sort: props.sorting }).fetch(),
sorting: props.sorting,
sortTasks: props.sortTasks,
};
}, TodosPage);
TodosPage
const propTypes = {
....
sorting: PropTypes.string.isRequired,
}
render() {
return (
...
{(() => {
if (this.state.listSelected) {
return (
<TaskPanel
tasks = {this.props.tasks}
sorting = {this.props.sorting}
sortTasks = {this.props.sortTasks}
/>
);
}
})()}
そして後に、Tここで
<Route path="/admin" component={AdminAppContainer}>
<IndexRoute component={AdminMainContainer}/>
<Route path="todos" component={TasksContainer}>
<Route path=":listId" component={TodosPage}/>
</Route>
</Route>
はまた、私はちょうど状態 "仕分け" 必要があります... impricatedコンポーネントです:
const propTypes = {
....
sorting: PropTypes.string.isRequired,
}
handleSelect(event, sorting) {
switch(event) {
case 1: return this.props.sortTasks({ createdAt: -1 });
case 2: return this.props.sortTasks({ createdAt: 0 });
};
}
render() {
return (
<DropdownButton
onSelect={(event, sorting) => this.handleSelect(event, this.props.sorting)}
<MenuItem eventKey="1">Created Date Asc</MenuItem>
<MenuItem eventKey="2">Created Date Desc</MenuItem>
</DropdownButton>
...
{this.renderTasks()}
...
最後のポイント、路線:パネル、TodosPageの子を頼みますこのTasksContainerでは、AppClassの他の子ではありません...この状態だけをこの子に配布することはできますか?
ありがとうございます。
ちょっと@Max G.それはまさに私が代わりにしようとしていたものですが、問題があります。方法で状態を更新できません...私の投稿を編集しています – guillaumek
今。あなたが持っているエラーは何ですか?コンソールには何もありませんか?私が気づいたことの1つは、おそらく問題ではないが、TodosContainerにあり、あなたの関数は '{props}'をパラメータとして取る。私は* createContainerが最上位レベルの小道具、つまり* 'createContainer((props)=> {})'を与えると思う。あなたはワットを使って、実際には 'props.props'を探しています。これは未定義につながる可能性があります。しかし、この場合、コンソールに表示されるはずです。また、 'App'で' TodosContainer'を呼び出しているとしますか? –
いいえ私は残念ながらコンソールに何も持っていません。 console.logが結果を表示するので、私は自分のstate.sortingを関係する子に渡すことができるようです。しかし、関数sortTasksは機能しません。エラーメッセージはありませんが、何もしません。また、私は小道具をパラメータから消去しようとしました:容器のthis.props.sorting、それは私が持っているコンソールで動作していない:ソートは未定義です。私は記事を編集してルートを表示します。それはコンテナが呼び出される場所です。どうもありがとうございました – guillaumek