解決策は私が仕事をすることができます。私は良い方法があるのだろうかと思っています。基本的には、私はCourseesPage> CourseList> CourseListRowから小道具としてonDeleteを渡しています。 CourseListRowはonDeleteがトリガーされている場所で、削除したいコースのidをevent.target.value経由でCoursesPageコンテナコンポーネントのdeleteCourse関数に渡しています。React-Redux、多くのレベルのコンテナメソッドへの参照を深く渡しますか?
これを行うクリーナー方法はありますか?この場合、コンテキストを使用するのは意味がありますか?
コンテナコンポーネント方法をレンダリング:
CoursesPage.js
render() {
const {courses} = this.props;
return (
<div>
<h1>Courses</h1>
<input type="submit"
value="Add Course"
className="btn btn-primary"
onClick={this.redirectToAddCoursePage}/>
<CourseList
courses={courses}
onDelete={this.deleteCourse}/>
</div>
);
}
1レベル:
CourseList.js
import React, {PropTypes} from 'react';
import CourseListRow from './CourseListRow';
const CourseList = ({courses, onDelete}) => {
return (
<table className="table">
<thead>
<tr>
<th> </th>
<th>Title</th>
<th>Author</th>
<th>Category</th>
<th>Length</th>
</tr>
</thead>
<tbody>
{courses.map(course =>
<CourseListRow key={course.id} course={course} onDelete={onDelete}/>
)}
</tbody>
</table>
);
};
CourseList.propTypes = {
courses: PropTypes.array.isRequired
};
export default CourseList;
第2レベル:
CourseListRow.js
import React, {PropTypes} from 'react';
import {Link} from 'react-router';
const CourseListRow = ({course, onDelete}) => {
return (
<tr>
<td><a href={course.watchHref} target="_blank">Watch</a></td>
<td><Link to={'/course/' + course.id}>{course.title}</Link></td>
<td>{course.authorId}</td>
<td>{course.category}</td>
<td>{course.length}</td>
<td>
<button
type="submit"
name="deleteCourseButton"
onClick={onDelete}
value={course.id}
> Delete </button>
</td>
</tr>
);
};
CourseListRow.propTypes = {
course: PropTypes.object.isRequired
};
export default CourseListRow;
なぜコンテキストを追加しますか? CourseListRowからあなたの削除アクションをディスパッチするのはどうですか? – azium
それはコンプレックスを扱うコンテナコンポーネントのコンベンションを守ろうとしていたので、私はそれをしませんでした。あなたはCourseListRowからアクションを送出するだけでしょうか? – matthewalexander
あなたが持っている方法、または行からの発送方法が最良の選択肢です。どちらも問題ありません。 'ダム'コンポーネントは再利用可能ですが、それはあなたが価値があるものを決める必要があるトレードオフです – azium