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",
    pre: "pre",
    span: "span"
  }, props.components);
  return jsxs(Fragment, {
    children: [jsx(_components.p, {
      children: "Solid는 상태를 업데이트할 때 얕은 불변 패턴 사용할 것을 강력하게 권장합니다.\n읽기와 쓰기를 분리함으로써 컴포넌트 계층들을 통과할 때 프록시에 대한 변경 사항을 잃어버릴 위험없이 시스템의 반응성을 더 잘 컨트롤할 수 있습니다.\n이 점은 시그널에 비해 스토어에서 훨씬 더 증대됩니다."
    }), "\n", jsxs(_components.p, {
      children: ["하지만 Mutation이 더 추론하기 쉬운 경우도 있습니다.\n그렇기 때문에 Solid는 ", jsx(_components.code, {
        children: "setStore"
      }), " 호출 내에서 Store 객체의 쓰기 가능한 프록시 버전을 수정할 수 있도록 Immer에서 영감을 받은 ", jsx(_components.code, {
        children: "produce"
      }), " store 수정 함수를 제공합니다."]
    }), "\n", jsxs(_components.p, {
      children: ["이는 컨트롤을 포기하지 않으면서도 작은 영역의 mutation을 허용하는 좋은 도구입니다.\nTodo 예제에서 이벤트 핸들러를 다음과 같이 변경해서 ", jsx(_components.code, {
        children: "produce"
      }), "를 사용해 보겠습니다:"]
    }), "\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: "setTodos"
        }), "(\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: "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-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: ["Store에 ", jsx(_components.code, {
        children: "produce"
      }), "를 사용하면 대부분의 케이스를 처리할 수 있지만, Solid에는 ", jsx(_components.code, {
        children: "createMutable"
      }), "를 사용해 mutable Store 객체를 생성하는 방법도 있습니다.\n내부 API에 권장되는 접근 방식은 아니지만, 때로는 서드파티 시스템과의 상호 운용성이나 호환성을 위해 유용하게 사용할 수 있습니다."]
    })]
  });
}
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-79c145ec.js.map
