<Mutation mutation={addUserQuery} variables={{
username: "AuraDivitiae",
firstname: "Michael",
lastname: "Lee"
}}>
{
(addUser, data) => {
count = count + 1
console.log("render no:" + count);
console.log(data)
return (
<div className="form">
<form onSubmit={(e) => {
e.preventDefault();
new Promise((resolve, reject) => { addUser(); resolve("Mutation function called!") }).
then((prevData) => { console.log(prevData); console.log(data); })
}}>
<button type="submit">Add User</button>
</form>
</div>
);
}
}
</Mutation>
Журналы консоли
render no:1
main.js:88
{called: false, loading: false, data: undefined, error: undefined, client: DefaultClient}
---------------- Нажатие кнопки ------------------------------------------
render no:2
main.js:88
{called: true, loading: true, data: undefined, error: undefined, client: DefaultClient}
main.js:98
Mutation function called!
main.js:98
{called: false, loading: false, data: undefined, error: undefined, client: DefaultClient}
render no:3
main.js:88
{called: true, loading: false, data: {…}, error: undefined, client: DefaultClient}
Из этих журналов видно, чтоПервоначально, когда компонент Mutate монтируется, мы получаем рендер no: 1. При нажатии кнопки в строке вызывается функция mute addUser () в обещании, которое разрешается с помощью "Mutation function selected".Однако в журналах он показывает объект результата изменения в main.js: 88, это означает, что он повторно отображает компонент.
Мой вопрос заключается в том, обновляет ли вызов функции mutate состояние, которое повторно отображает компонент?И был ли контроль передан функции mutate, чтобы компонент повторно визуализировался до того, как обещание могло быть разрешено и впоследствии использовано?Но после повторного рендеринга разве не должно вызываться шоу данных?