использование кеша apollo-client может привести к некоторым вопросам, которые действительно зависят от реализации apollo-client
и nextjs
. Если вы откроете свое приложение, введя URL-адрес в адресную строку браузера, Next.js
выполнит запросы (при условии, что представление должно извлекать данные) со стороны сервера, а затем отправит клиенту обработанный HTML.
Поскольку apollo-client
извлекает, а затем кэширует данные со стороны сервера, то возникает вопрос «Делает ли следующее. js отправляет apollo-client со своим кешем на сторону клиента для следующего запроса?»
Вы не можете быть уверены в этом, если не будете четко понимать, что такое Next.js
и apollo-client cache
(о его реализации или о том, как он работает внутри, если apollo
кэширует данные в памяти на стороне сервера). , вы потерпите неудачу, если вы go таким образом)
Ответ не уверен , потому что это зависит от двух вещей одновременно. И, возможно, изменилось в будущем!
Итак, чтобы справиться с этой проблемой, просто используйте способ Next.js
, он разработал туннель для данных, это query
на url.
const NameForm = props => {
const [name, setName] = useState("");
const client = useApolloClient();
const router = useRouter();
const handleSubmit = e => {
e.preventDefault();
if(!name) return;
router.push(`/user/register?name=${name}`);
}
//render ...
}
import { useRouter } from 'next/router';
import AddUserForm from '../../components/forms/AddUserForm';
const AddUser = () => {
const router = useRouter();
return (
<React.Fragment>
<AddUserForm name={router.query.name} />
</React.Fragment>
)
}
export default AddUser;
Если вы хотите отправить объект вместо строки?
const data = { name: "FoxeyeRinx", email: "foxeye.rinx@gmail.com" };
const base64 = btoa(JSON.stringify(data));
router.push(`/user/register?data=${base64}`);
const AddUser = () => {
const router = useRouter();
const base64 = router.query.data;
//decode base64 then parse it to js object
const data = JSON.parse(atob(base64));
return (
<React.Fragment>
<AddUserForm data={data}/>
</React.Fragment>
)
}
Если вы думаете запрос уродлив и хотите скрыть запрос , используйте это руководство: https://nextjs.org/learn/basics/clean-urls-with-dynamic-routing