私は新しいブログを作成するか、既存のブログを編集するブログフォームを含むブートストラップモーダルコンポーネントを持っています。モーダルコンポーネントで編集するブログを選択すると、ajaxが呼び出され、フォームデータが自動入力されます。コンポーネントを非表示にして、コンポーネントWillRecievePropsを使用して小道具を処理する
私の親コンポーネントは次のようになります。
class Dashboard extends React.Component {
...
editSelectedBlog(blog){
this.setState({ selectedBlog: blog, modalShown: true, blogEditing: true }, this.showModal)
}
showNewBlogModal() {
this.setState({ modalShown: true, blogEditing: false }, this.showModal)
}
showModal() {
$('#addBlog').modal('show')
}
hideModal(updateBlogs = false) {
this.setState({ modalShown: false, blogEditing: false })
if (updateBlogs) { // call ajax and fetch updated blogs }
}
render() {
...
<Blogs>
{blogs.map((blog) => {
return (
<Blog
key={shortid.generate()}
blog={blog}
onEditItem={this.editSelectedBlog}
/>
)
}
)}
</Blogs>
{modalShown &&
<BlogModal
postApi={someUrl}
selectedBlogId={this.state.selectedBlog? this.state.selectedBlog.id : undefined}
onModalHide={this.hideModal}
/>
}
<div role="presentation" onClick={this.showNewBlogModal} > Add new blog
</div>
}
}
ブログのモーダルコンポーネントは次のようになります。
class BlogModal extends React.Component {
...
componentWillMount() {
if(selectedBlogId){ // call ajax for blog using blog id and set blog form data }
}
render() {
const isEditing = this.props.selectedBlogId !== undefined
return (
....
{isEditing ? (
<button type="button" onClick={this.editSelectedBlog}>Update</button>
) : (
<button type="button" onClick={this.addNewBlog}>Save</button>
)
}
)
}
BlogModal.defaultProps = {
blog: {
title: '',
date: '',
content: ''
}
}
は、モーダルを隠し、その後
componentWillMount
方法でAJAXを呼び出すこの方法が推奨されますか私は
modalShown
条件を削除し、常にモーダルを維持し、その後
BlogModal
の
componentWillRecieveProps
方法で編集するためのAJAXリクエストを処理する必要がありますか?
ありがとうございました。また、新しいブログの作成や既存のブログの更新に使用される保存ボタンと更新ボタンがモーダルにあります。 Post/Put Ajaxを親メソッドにも移動する必要がありますか?私はこれらの2つの方法がモーダルの一部でなければならないと思います、私が間違っているかどうかを教えてください。 –
その場合、おそらくDashboardはBlogModalの表示/非表示のみになります。その後、すべてのロジックをBlogModalに移動します。次に、ボタンをレンダリングするための別個のコンポーネントを作成します。 BlogModalActions - とコンテンツ/フォーム - たとえばBlogModalForm。 その後、BlogModalはすべてのハンドラと非同期を処理し、子プロセスはコールする小道具としてコールバックを受け取ります。即ちそれらは提示的である。 – patrick