Я считаю apollo-link-state
более полезным для ситуаций, когда вы хотите управлять состоянием, полностью на стороне клиента, а не частью данных, которые вы извлекаете с вашего сервера.Я не думаю, что он хорошо подходит для управления состоянием компонентов, особенно форм.Что прекрасно работает, так это объединение Apollo с библиотекой вроде Formik .Это уменьшает шаблон и общую сложность и вашего компонента.Вот грубый пример:
<Query query={SOME_QUERY} />
{({ loading, data }) => {
if (loading) return <LoadingIndicator/>
return (
<Mutation query={SOME_MUTATION}>
{(mutate) => (
<Formik
initialValues={_.pick(data.someData, ['foo', 'bar'])}
validate={/** optional validation function or schema **/}
onSubmit={values => mutate({ variables: values })}
>
{(formikProps) => (
<YourFormComponent {...formikProps}/>
)}
</Formik>
)}
</Mutation>
)
}}
</Query>
Функция рендеринга компонента Formik
получает тонну реквизитов, которые все описаны здесь .Фактический компонент формы может не иметь состояния и в основном просто отображать, какие реквизиты передаются ему (значения, ошибки, обработчики onChange и т. Д.).Formik принимает yup схемы для проверки, что также упрощает проверку входных данных.