{"id":114,"date":"2024-08-21T03:34:47","date_gmt":"2024-08-21T03:34:47","guid":{"rendered":"https:\/\/www.yehger.com\/?p=114"},"modified":"2024-08-21T03:34:47","modified_gmt":"2024-08-21T03:34:47","slug":"react-using-use-immer","status":"publish","type":"post","link":"https:\/\/www.yehger.com\/index.php\/2024\/08\/21\/react-using-use-immer\/","title":{"rendered":"React using &#8220;use-immer&#8221;"},"content":{"rendered":"<h2>Using immer to manage object.<\/h2>\n<pre><code class=\"language-jsx\">import React from &quot;react&quot;;\nimport { useImmer } from &quot;use-immer&quot;;\n\nfunction App() {\n  const [person, updatePerson] = useImmer({\n    name: &quot;Michel&quot;,\n    age: 33\n  });\n\n  function updateName(name) {\n    updatePerson(draft =&gt; {\n      draft.name = name;\n    });\n  }\n\n  function becomeOlder() {\n    updatePerson(draft =&gt; {\n      draft.age++;\n    });\n  }\n\n  return (\n    &lt;div className=&quot;App&quot;&gt;\n      &lt;h1&gt;\n        Hello {person.name} ({person.age})\n      &lt;\/h1&gt;\n      &lt;input\n        onChange={e =&gt; {\n          updateName(e.target.value);\n        }}\n        value={person.name}\n      \/&gt;\n      &lt;br \/&gt;\n      &lt;button onClick={becomeOlder}&gt;Older&lt;\/button&gt;\n    &lt;\/div&gt;\n  );\n}<\/code><\/pre>\n<h2>using immer to manage single value.<\/h2>\n<pre><code class=\"language-jsx\">import React from &#039;react&#039;;\nimport { useImmer } from &#039;use-immer&#039;;\n\nfunction BirthDayCelebrator(){\n  const [age, setAge] = useImmer(20);\n\n  function birthDay(event){\n    setAge(age + 1);\n    alert(`Happy birthday #${age} Anon! hope you good`);\n  }\n\n  return(\n    &lt;div&gt;\n      &lt;button onClick={birthDay}&gt;It is my birthday&lt;\/button&gt;\n    &lt;\/div&gt;\n  );\n}<\/code><\/pre>\n<h2>using immer reducer<\/h2>\n<pre><code class=\"language-jsx\">import React from &quot;react&quot;;\nimport { useImmerReducer } from &quot;use-immer&quot;;\n\nconst initialPerson = {\n    name:&quot;&quot;,\n    age:18,\n    birthday:1988,\n    health:100\n};\n\nfunction FormReducer(draft,action) {\n    switch(action){\n        case &#039;attack&#039;:\n            return draft.health--\n        case &#039;treat&#039;:\n            return draft.health++\n        case &#039;reset&#039;:\n            return initialPerson\n    }\n}\n\nfunction Counter() {\n  const [person,dispathPerson] = useImmerReducer(FormReducer, initialPerson);\n  return (\n    &lt;&gt;\n      Count: {state.count}\n      &lt;button onClick={() =&gt; dispathPerson(&quot;attack&quot;)}&gt;been attack&lt;\/button&gt;\n      &lt;button onClick={() =&gt; dispathPerson(&quot;treat&quot;)}&gt;been treat&lt;\/button&gt;\n      &lt;button onClick={() =&gt; dispathPerson(&quot;reset&quot;)}&gt;reset property&lt;\/button&gt;\n    &lt;\/&gt;\n  );\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Using immer to manage object. import React from &quot;react&quot;; import { useImmer } from &quot;use-immer&quot;; function App() { const [person,&#8230; <a class=\"read-more\" href=\"https:\/\/www.yehger.com\/index.php\/2024\/08\/21\/react-using-use-immer\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-114","post","type-post","status-publish","format-standard","hentry","category-react-study"],"_links":{"self":[{"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/posts\/114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/comments?post=114"}],"version-history":[{"count":1,"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/posts\/114\/revisions"}],"predecessor-version":[{"id":115,"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/posts\/114\/revisions\/115"}],"wp:attachment":[{"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/media?parent=114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/categories?post=114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yehger.com\/index.php\/wp-json\/wp\/v2\/tags?post=114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}