import { jsx, jsxs, Fragment } from 'solid-jsx/jsx-runtime';

/*@jsxRuntime automatic @jsxImportSource solid-jsx*/
const toc = [];
function _createMdxContent(props) {
  const _components = Object.assign({
    p: "p",
    code: "code",
    a: "a",
    blockquote: "blockquote",
    pre: "pre",
    span: "span"
  }, props.components);
  return jsxs(Fragment, {
    children: [jsxs(_components.p, {
      children: [jsx(_components.code, {
        children: "Сторы"
      }), " в Solid позволяют нам использовать вложенную реактивность. Это ", jsx(_components.a, {
        href: "https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
        children: "прокси"
      }), ", свойства которых можно отслеживать, и они могут содержать другие объекты, которые сами автоматически оборачиваются в прокси, и так далее."]
    }), "\n", jsxs(_components.p, {
      children: ["Чтобы облегчить использование ресурсов, Solid создает базовые ", jsx(_components.code, {
        children: "Сигналы"
      }), " только для свойств, доступ к которым осуществляется в областях отслеживания. Таким образом все ", jsx(_components.code, {
        children: "Сигналы"
      }), " в ", jsx(_components.code, {
        children: "Сторах"
      }), " создаются лениво, в момент запроса."]
    }), "\n", jsxs(_components.p, {
      children: ["Вызов createStore принимает начальное значение и возвращает кортеж (", jsx(_components.code, {
        children: "tuple"
      }), ") для чтения / записи, аналогичный ", jsx(_components.code, {
        children: "Сигналам"
      }), ". Первый элемент - это прокси, доступный только-для-чтения, а второй - функция-сеттер (", jsx(_components.code, {
        children: "setter function"
      }), ")."]
    }), "\n", jsx(_components.p, {
      children: "Функция-сеттер в своей самой простой форме принимает объект, свойства которого будут объединены с текущим состоянием. Она также поддерживает синтаксис пути для свойства, поэтому мы легко сможем выполнять вложенные обновления. Таким образом, мы по-прежнему сохраняем нашу реактивность, но точно определять обновления."
    }), "\n", jsxs(_components.blockquote, {
      children: ["\n", jsx(_components.p, {
        children: "Синтаксис пути Solid имеет множество форм и включает мощный синтаксис для назначения итераций и диапазонов. Обратитесь к документации API за подробностями."
      }), "\n"]
    }), "\n", jsx(_components.p, {
      children: "Давайте посмотрим, насколько проще добиться вложенной реактивности с помощью Store. Мы можем заменить инициализацию нашего компонента следующим образом:"
    }), "\n", jsx(_components.pre, {
      children: jsxs(_components.code, {
        className: "hljs language-js",
        children: [jsx(_components.span, {
          className: "hljs-keyword",
          children: "const"
        }), " [store, setStore] = ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "createStore"
        }), "({ ", jsx(_components.span, {
          className: "hljs-attr",
          children: "todos"
        }), ": [] });\n", jsx(_components.span, {
          className: "hljs-keyword",
          children: "const"
        }), " ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "addTodo"
        }), " = (", jsx(_components.span, {
          className: "hljs-params",
          children: "text"
        }), ") => {\n  ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "setStore"
        }), "(", jsx(_components.span, {
          className: "hljs-string",
          children: "'todos'"
        }), ", ", jsxs(_components.span, {
          className: "hljs-function",
          children: ["(", jsx(_components.span, {
            className: "hljs-params",
            children: "todos"
          }), ") =>"]
        }), " [...todos, { ", jsx(_components.span, {
          className: "hljs-attr",
          children: "id"
        }), ": ++todoId, text, ", jsx(_components.span, {
          className: "hljs-attr",
          children: "completed"
        }), ": ", jsx(_components.span, {
          className: "hljs-literal",
          children: "false"
        }), " }]);\n};\n", jsx(_components.span, {
          className: "hljs-keyword",
          children: "const"
        }), " ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "toggleTodo"
        }), " = (", jsx(_components.span, {
          className: "hljs-params",
          children: "id"
        }), ") => {\n  ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "setStore"
        }), "(", jsx(_components.span, {
          className: "hljs-string",
          children: "'todos'"
        }), ", ", jsxs(_components.span, {
          className: "hljs-function",
          children: ["(", jsx(_components.span, {
            className: "hljs-params",
            children: "t"
          }), ") =>"]
        }), " t.", jsx(_components.span, {
          className: "hljs-property",
          children: "id"
        }), " === id, ", jsx(_components.span, {
          className: "hljs-string",
          children: "'completed'"
        }), ", ", jsxs(_components.span, {
          className: "hljs-function",
          children: ["(", jsx(_components.span, {
            className: "hljs-params",
            children: "completed"
          }), ") =>"]
        }), " !completed);\n};\n"]
      })
    }), "\n", jsx(_components.p, {
      children: "В данном примере мы используем синтаксис пути Store с функцией-сеттером, которые позволяют нам получить предыдущее состояние и возвращать новое состояние для вложенных значений."
    }), "\n", jsxs(_components.p, {
      children: ["Вот и все. Для того, чтобы посмотреть как происходят обновление вы можете установить флажок и посмотреть в Консоли (", jsx(_components.code, {
        children: "Console"
      }), ")"]
    })]
  });
}
function MDXContent(props = {}) {
  const {wrapper: MDXLayout} = props.components || ({});
  return MDXLayout ? jsx(MDXLayout, Object.assign({}, props, {
    children: jsx(_createMdxContent, props)
  })) : _createMdxContent(props);
}

export { MDXContent as default, toc };
//# sourceMappingURL=lesson-35974840.js.map
