{"id":25422,"date":"2024-07-11T17:58:45","date_gmt":"2024-07-11T08:58:45","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=25422"},"modified":"2024-07-11T18:16:22","modified_gmt":"2024-07-11T09:16:22","slug":"react-%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e5%ae%8c%e6%88%90%e7%89%88","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=25422","title":{"rendered":"React \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5b8c\u6210\u7248"},"content":{"rendered":"\n<p>index.html<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"ja\"&gt;\n\n&lt;head&gt;\n  &lt;meta charset=\"UTF-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n  &lt;title&gt;My React App&lt;\/title&gt;\n  &lt;script src=\"https:\/\/unpkg.com\/react@18\/umd\/react.development.js\"&gt;&lt;\/script&gt;\n  &lt;script src=\"https:\/\/unpkg.com\/react-dom@18\/umd\/react-dom.development.js\"&gt;&lt;\/script&gt;\n  &lt;script src=\"https:\/\/unpkg.com\/@babel\/standalone\/babel.min.js\"&gt;&lt;\/script&gt;\n  &lt;link rel=\"stylesheet\" href=\"style.css\"&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n  &lt;div id=\"container\"&gt;&lt;\/div&gt;\n\n  &lt;script type=\"text\/babel\"&gt;\n    'use strict';\n\n    {\n      const Menu = (props) =&gt; {\n\n        const decrement = () =&gt; {\n\n          props.onDecrement(props.menuId);\n        };\n        const increment = () =&gt; {\n          props.onIncrement(props.menuId);\n        };\n\n        return (\n          &lt;li&gt;\n            &lt;button onClick={decrement}&gt;-&lt;\/button&gt;\n            &lt;button onClick={increment}&gt;+&lt;\/button&gt;\n            {props.name} ({props.price}G \u2613 {props.count}\u500b)\n          &lt;\/li&gt;\n        );\n      };\n\n      const App = () =&gt; {\n        const &#91;counts, setCounts] = React.useState(&#91;0, 0, 0]);\n        const menus = &#91;\n          { id: 0, name: '\u30dd\u30fc\u30b7\u30e7\u30f3', price: 400 },\n          { id: 1, name: '\u30cf\u30a4\u30dd\u30fc\u30b7\u30e7\u30f3', price: 500 },\n          { id: 2, name: '\u30a8\u30ea\u30af\u30b5\u30fc', price: 300 },\n        ];\n        const total =\n          (menus&#91;0].price * counts&#91;0]) +\n          (menus&#91;1].price * counts&#91;1]) +\n          (menus&#91;2].price * counts&#91;2]);\n        const decrementMenu = (menuId) =&gt; {\n          if(counts&#91;menuId] &gt; 0){\n          const newCounts = &#91;...counts];\n          newCounts&#91;menuId]--;\n          setCounts(newCounts);\n          }\n        };\n        const incrementMenu = (menuId) =&gt; {\n          const newCounts = &#91;...counts];\n          newCounts&#91;menuId]++;\n          setCounts(newCounts);\n        };\n        const menuItems = menus.map((menu) =&gt; {\n          return (\n            &lt;Menu\n              key={menu.id}\n              menuId={menu.id}\n              count={counts&#91;menu.id]}\n              name={menu.name}\n              price={menu.price}\n              onDecrement={decrementMenu}\n              onIncrement={incrementMenu}\n            \/&gt;\n          );\n        });\n\n        return (\n          &lt;&gt;\n            &lt;h1&gt;\u30e1\u30cb\u30e5\u30fc&lt;\/h1&gt;\n            &lt;ul className=\"menus\"&gt;\n              {menuItems}\n            &lt;\/ul&gt;\n            &lt;p&gt;\u5408\u8a08: {total}G&lt;\/p&gt;\n          &lt;\/&gt;\n        );\n      };\n\n      const container = document.querySelector('#container');\n      const root = ReactDOM.createRoot(container);\n      root.render(&lt;App \/&gt;);\n    }\n  &lt;\/script&gt;\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>style.css<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@charset \"utf-8\";\n\nbody{\n    margin: 0;\n}\n\n#container{\n    width: 400px;\n    margin: auto;\n}\n\nh1{\n    margin: 16px 0 0 0;\n    font-size: 20px;\n    text-align: center;\n}\n\n.menus{\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n}\n\n.menus > li{\n    border: 1px solid #ccc;\n    padding: 8px;\n    border-radius: 8px;\n    margin-top: 16px;\n}\n\n.menus button{\n    margin-right: 8px;\n    width: 24px;\n}\np{\n    margin: 0;\n    text-align: right;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>index.html style.css<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[4,132],"tags":[],"class_list":["post-25422","post","type-post","status-publish","format-standard","hentry","category-programming","category-react"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25422"}],"version-history":[{"count":2,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25422\/revisions"}],"predecessor-version":[{"id":25424,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25422\/revisions\/25424"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25422"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}