Литеральная строка шаблона не обновляется при изменении значения и повторном запуске кода

Литерал шаблона не обновляется даже после повторного запуска кода. Я вышел из объекта, и значение действительно меняется.

let store = {
  txt: 1337,
  txt2: 1837
};

let pages = [
  {
    name: "page1",
    show: true,
    template: `
    <p>This is page1 ${store.txt}</p>
    <button onclick = "reactiveChange(store.txt, 1473)">Change store!</button>
    <button onclick = "changePage('page2')">change page</button>
    `,
  },
  {
    name: "page2",
    show: false,
    template: `<p>This is page2 ${store.txt2}</p>
    <button onclick = "reactiveChange(store.txt, 6537)">Change store!</button>
    <button onclick = "changePage('page1')">change page</button>
    `,
  },
];

let render = (() => {
  let app = document.getElementById("app");
  let check = pages.filter((page) => page.show === true).length === 0 ? false : true;
  if (!check) console.error("No page is set to true");
  else app.innerHTML = pages.filter((page) => page.show === true)[0].template;
});

window.onload = render

let reactiveChange = (from, to) => {
    from = to
    render()
}

let changePage = (pageName) => {
    pages.map(page => page.show = false)
    pages.filter(page => page.name === pageName)[0].show = true;
    render()
}
<script src = "app.js"></script>
<div id = "app"></div>

Не добавляйте спам-текст в свое сообщение, чтобы обойти требование, которое просит вас объяснить больше проблемы — вместо этого, пожалуйста, объясните проблему более подробно.

CertainPerformance 21.12.2020 07:31

Поскольку код находится в теле скрипта, как именно вы его «перезапускаете»?

Teemu 21.12.2020 07:34

Функция рендеринга вызывается после функций changePage и reactiveChange.

EMILO 21.12.2020 07:35
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
3
3
689
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Значение строки шаблона не обновляется автоматически. Это просто статическая строка после того, как она была определена.

Но вы можете сделать их геттерными функциями, чтобы они обновлялись всякий раз, когда вы на них ссылаетесь:

let pages = [
  {
    name: "page1",
    show: true,
    get template() {
      return `<p>This is page1 ${store.txt}</p>
      <button onclick = "reactiveChange(store.txt, 1473)">Change store!</button>
      <button onclick = "changePage('page2')">change page</button>`;
    }
  },
  {
    name: "page2",
    show: false,
    get template() {
      return `<p>This is page2 ${store.txt2}</p>
      <button onclick = "reactiveChange(store.txt, 6537)">Change store!</button>
      <button onclick = "changePage('page1')">change page</button>`;
    }
  },
];

Другие вопросы по теме