Svelte / Sapper - Невозможно сохранить данные из ответа API на другом маршруте - PullRequest
1 голос
/ 18 марта 2020

Я пытался создать систему аутентификации в svelte, и регистрация - это многоэтапный процесс, поэтому необходимо сохранить ответ API от шага 1 и пройти каждый шаг по отдельному маршруту. Обнаружено store в svelte, но каким-то образом он просто возвращает undefined при извлечении данных с использованием get. Ниже приведен демонстрационный код, который возвращает тот же результат.

index.svelte

<script>
import signUpStore from "./hobby-store.js";
let data = {
    name: "Rahul",
    age: "something"
};
signUpStore.setSignUp(data);

//   let result = signUpStore.getSignUp();
//   console.log(result); //undefined
</script>

<p>
<strong>
    Try editing this file (src/routes/index.svelte) to test live reloading.
</strong>
</p>

About.svelte

<script>
import signUpStore from "./hobby-store.js";
import { onMount } from "svelte";
let result = signUpStore.getSignUp();
console.log("server side : ", result); //undefined

onMount(() => {
    console.log("client side : ", result); // undefined
});
</script>

<p>This is the 'about' page. There's not much here.</p>

хобби-магазин. js

import {
    writable,
    get
} from 'svelte/store'

const signUp = writable()

const signUpStore = {
    subscribe: signUp.subscribe,
    setSignUp: (items) => {
        signUp.set(items)
        // console.log('items : ', items, signUp)
    },
    addSignUp: (data) => {
        signUp.update(items => {
            return items.concat(data)
        })
    },
    getSignUp: () => {
        get(signUp)
    }
}

export default signUpStore;

Просто нужно сохранить эти данные в сеансе или любом постоянном хранилище, которое предоставляет svelte или sapper, и сбросить их при успешном действии.

1 Ответ

0 голосов
/ 18 марта 2020

Пример сеанса. js Сохранение ниже с ведением журнала:

import { writable } from 'svelte/store';
import { deepClone } from './../utilities/deepClone.js';

const newSession = {
  a; 0, b: 0, x: 0
};

function sessionStore() {

  const { subscribe, set, update } = writable(deepClone(newSession));
  let logging = false;

  return {
    subscribe,  // $session...
    update: (obj) => {
      update(o => { // session.update({a:1, b:2});
        const merged = Object.assign(o, obj);
        if (logging) console.log('session update', merged);
        return merged;
      });
    },
    set: (key, value) => { // session.set('x', 9)
      update(o => {
      const merged = Object.assign(o, {[key]: value});
      if (logging) console.log('session set', merged);
      return merged;
    });
    },
    reset: () => {  // session.reset()
      set(deepClone(newSession));
    },
    set log(bool) {  // setter: session.log = true;
      logging = bool === true;
    }
  };
};
export const session = sessionStore();

Example.svelte

<script>
  import { session } from './session.js';

  session.log = true;
  $: console.log('reactive log', $session);
  session.set('x', 10);
  session.reset();

<script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...