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",
    blockquote: "blockquote",
    pre: "pre",
    span: "span"
  }, props.components);
  return jsxs(Fragment, {
    children: [jsx(_components.p, {
      children: "ストアは、ネストしたリアクティビティに対する Solid の答えです。プロパティを追跡できるプロキシオブジェクトで、他のオブジェクトを含むことができ、そのオブジェクト自身は自動的にプロキシにラップされます。"
    }), "\n", jsx(_components.p, {
      children: "軽量化のため、Solid は追跡スコープでアクセスされるプロパティに対してのみ、基礎となる Signal を作成します。そのため、ストア内の Signal はすべて、要求に応じて遅延して作成されます。"
    }), "\n", jsxs(_components.p, {
      children: [jsx(_components.code, {
        children: "createStore"
      }), " の呼び出しは初期値を取り、Signal と同様の読み取り/書き込みのタプルを返します。最初の要素は読み取り専用のストアプロキシで、2 番目の要素はセッター関数です。"]
    }), "\n", jsx(_components.p, {
      children: "最も基本的な形式のセッター関数は、プロパティが現在の状態にマージされるオブジェクトを受け取ります。また、パス構文もサポートしているので、ネストした更新を行なうことができます。このようにして、リアクティビティの制御を維持しつつ、きわめて正確な更新を行なうことができます。"
    }), "\n", jsxs(_components.blockquote, {
      children: ["\n", jsx(_components.p, {
        children: "Solid のパス構文には様々な形式があり、反復や範囲を指定する強力な構文もあります。完全なリファレンスについては API ドキュメントを参照してください。"
      }), "\n"]
    }), "\n", jsx(_components.p, {
      children: "ストアを使ってネストしたリアクティビティを実現するのがどれほど簡単か見てみましょう。コンポーネントの初期化を以下のように置き換えることができます:"
    }), "\n", jsx(_components.pre, {
      children: jsxs(_components.code, {
        className: "hljs language-js",
        children: [jsx(_components.span, {
          className: "hljs-keyword",
          children: "const"
        }), " [todos, setTodos] = ", jsx(_components.span, {
          className: "hljs-title function_",
          children: "createStore"
        }), "([]);\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: "setTodos"
        }), "([...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: "setTodos"
        }), "(\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-string",
          children: "\"completed\""
        }), ",\n    ", jsxs(_components.span, {
          className: "hljs-function",
          children: ["(", jsx(_components.span, {
            className: "hljs-params",
            children: "completed"
          }), ") =>"]
        }), " !completed\n  );\n};\n"]
      })
    }), "\n", jsx(_components.p, {
      children: "ストアのパス構文を利用して、関数セッターで以前の状態を取得し、ネストした値で新しい状態を返すことができます。"
    }), "\n", jsx(_components.p, {
      children: "これで完成です。テンプレートの残りの部分は、すでに細かく反応するようになっています（チェックボックスをクリックしてコンソールをチェックしてください）。"
    })]
  });
}
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-bd8d4987.js.map
