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",
    pre: "pre",
    span: "span"
  }, props.components);
  return jsxs(Fragment, {
    children: [jsxs(_components.p, {
      children: ["Solid настоятельно рекомендует использовать неглубокие неизменяемые (", jsx(_components.code, {
        children: "shallow immutable"
      }), ") паттерны для обновления состояния. Разделяя чтение и запись, мы сохраняем точный контроль над реактивностью нашей системы без риска потерять отслеживание изменений в наших прокси (", jsx(_components.code, {
        children: "proxy"
      }), ") при передаче данных через несколько компонентов. Этот подход виден гораздо сильнее в Сторах по сравнению с Сигналами."]
    }), "\n", jsxs(_components.p, {
      children: ["Стоит заметить, что мутабельная запись читается в разы проще. Поэтому Solid дает нам функцию ", jsx(_components.code, {
        children: "produce"
      }), ", которая была вдохновлена библиотекой ", jsx(_components.a, {
        href: "https://github.com/immerjs/immer",
        children: "Immer"
      }), ". Она позволяет нам изменять наши прокси-для-записи (", jsx(_components.code, {
        children: "writable proxy"
      }), ") в наших Сторах и применятся внутри вызова ", jsx(_components.code, {
        children: "setStore"
      }), "."]
    }), "\n", jsxs(_components.p, {
      children: ["Это хороший инструмент, позволяющий допускать небольшие зоны мутации, не отказываясь от реактивного контроля. Давайте воспользуемся ", jsx(_components.code, {
        children: "produce"
      }), " в нашем примере Todos, заменив наш код обработчика событий на:"]
    }), "\n", jsx(_components.pre, {
      children: jsxs(_components.code, {
        className: "hljs language-jsx",
        children: [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"
        }), "(\n    ", jsx(_components.span, {
          className: "hljs-string",
          children: "'todos'"
        }), ",\n    ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "produce"
        }), "(", jsxs(_components.span, {
          className: "hljs-function",
          children: ["(", jsx(_components.span, {
            className: "hljs-params",
            children: "todos"
          }), ") =>"]
        }), " {\n      todos.", jsx(_components.span, {
          className: "hljs-title function_",
          children: "push"
        }), "({ ", 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  );\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"
        }), "(\n    ", jsx(_components.span, {
          className: "hljs-string",
          children: "'todos'"
        }), ",\n    ", jsxs(_components.span, {
          className: "hljs-function",
          children: [jsx(_components.span, {
            className: "hljs-params",
            children: "todo"
          }), " =>"]
        }), " todo.", jsx(_components.span, {
          className: "hljs-property",
          children: "id"
        }), " === id,\n    ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "produce"
        }), "(", jsxs(_components.span, {
          className: "hljs-function",
          children: ["(", jsx(_components.span, {
            className: "hljs-params",
            children: "todo"
          }), ") =>"]
        }), " (todo.", jsx(_components.span, {
          className: "hljs-property",
          children: "completed"
        }), " = !todo.", jsx(_components.span, {
          className: "hljs-property",
          children: "completed"
        }), ")),\n  );\n};\n"]
      })
    }), "\n", jsxs(_components.p, {
      children: ["Несмотря на то, что ", jsx(_components.code, {
        children: "produce"
      }), " внутри ", jsx(_components.code, {
        children: "Сторов"
      }), ", вероятно, покрывает подавляющее большинство случаев, Solid также позволяет нам создать мутабельный Стор, доступный в виде вызова ", jsx(_components.code, {
        children: " createMutable"
      }), ". Этот подход не рекомендуется для использования, но может быть полезен для совместимости со другими библиотеками."]
    })]
  });
}
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-2c5bc5df.js.map
