почему контекст не определен в стройном - PullRequest
0 голосов
/ 03 августа 2020

Я работаю над компонентом, и мне нужно использовать для него контекст. Но я не знаю, почему, когда я использую getContext, он не определен.

Это часть моих кодов в первом компоненте (компонент индекса):

import { setContext } from 'svelte';
import {onMount} from "svelte";

let tempSuggest;

const suggestModel = {
   category_id: 1,
   title: "",
   images: [{}],
   catalogues: [{}],
   dependent_attributes: [{}],
   independent_attributes: [{}],
};

$: tempSuggest = Object.assign({}, suggestModel);

onMount(() => {
   setContext(clientProductSuggest, tempSuggest);
});

в html кодах первого компонента (загрузка подкомпонентов в конце индексного файла):

<svelte:component this={component} {...props}/>

Во втором компоненте:

import { getContext } from 'svelte';
const c = getContext('clientProductSuggest');

console.log(c);

И теперь контекст не определен.

1 Ответ

1 голос
/ 03 августа 2020

Это потому, что контексты в Svelte по умолчанию не являются реактивными, когда вы назначаете tempSuggests контексту, это фактически undefined

Для того, чтобы Чтобы получить реактивность в вашем контексте, вы должны создать tempSuggests как хранилище:

import { setContext } from 'svelte';
import { writable } from "svelte/store";

let tempSuggest = writable({});

const suggestModel = {
   category_id: 1,
   title: "",
   images: [{}],
   catalogues: [{}],
   dependent_attributes: [{}],
   independent_attributes: [{}],
};

$: tempSuggest.update(value => Object.assign(value, suggestModel));
setContext('clientProductSuggest', tempSuggest);

Также учтите следующее:

  • setContext не нужно вызывать внутри onMount
  • первый аргумент setContext должен быть строкой (я добавил '')
  • suggestModel теперь является хранилищем и должно рассматриваться как таковое в дочерних элементах
...