Я новичок в GraphQL, но у меня есть опыт работы с React.
Я пытаюсь создать простое приложение с React и Apollo, в котором одна и та же форма используется для создания или обновления сущности, скажем Публикация .
Я не хочу дублировать форму, поэтому я подумал, что я бы определил компонент PostForm
и использовал бы страницы CreatePostPage
и UpdatePostPage
.
CreatePostPage.js (упрощенно)
const CreatePostPage = ({match}) => (
<div>
<h1>Create Post</h1>
<Mutation mutation={POST_CREATE}>
{(createPost, {data}) => (
<PostForm onSubmit={(formData) => createPost(formData)} />
)}
</Mutation>
</div>
)
UpdatePostPage.js (упрощенно)
const UpdatePostPage = ({match}) => (
<div>
<h1>Update Post</h1>
<Query query={POST_GET} variables={{id: match.params.id}}>
{({ data, networkStatus }) => {
const post = data && data.post ? omitDeep(data.post, '__typename') : null;
return (
<Mutation mutation={POST_UPDATE}>
{(updatePost, {data}) => (
<PostForm post={post} onSubmit={(formData) => updatePost(formData)} />
))}
</Mutation>
);
}}
</Query>
</div>
)
Теперь PostForm
необходимо поддерживатьего собственное состояние, так что пользователь может редактировать сообщение.Я планировал использовать componentWillReceiveProps()
, увидел, что сейчас это можно сделать getDerivedStateFromProps()
, а затем несколько раз прочитать, что я Возможно, не нужно производное состояние ...
Так что мне интересно, если это правильный способ сделать это?
Моя проблема хорошо описана в этой средней статье , и я реализовал решение (которое также предлагается командой React)
Но это кажется довольно хакерским.Это правильный способ сделать это или я должен обрабатывать локальное состояние по-другому?Хотите знать, как Дэн Абрамов будет обрабатывать простое приложение создания / обновления, как это =)
Спасибо за помощь!