{"id":228196,"date":"2022-10-12T10:59:00","date_gmt":"2022-10-12T07:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228196"},"modified":"2022-11-09T01:14:21","modified_gmt":"2022-11-08T22:14:21","slug":"kas-react-createclassi-komponent-on-katki-teeme-selle-korda","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kas-react-createclassi-komponent-on-katki-teeme-selle-korda\/","title":{"rendered":"Kas React.createClassi komponent on katki? Teeme selle korda!"},"content":{"rendered":"\n<p>Kui loote WordPressi Gutenbergi plokke (v\u00f5i isegi kui te seda ei tee), v\u00f5ite proovida panna <a href=\"https:\/\/wholesomecode.ltd\/blog\/add-select2-as-an-inspectorcontrol-in-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">oma konstruktsioonis t\u00f6\u00f6le kolmanda osapoole reaktsioonikomponent<\/a>. Kuid kui see on vanem element, t\u00e4psemalt selline, mis kasutab aegunud <code>React.createClass<\/code>meetodit, v\u00f5ite takerduda.<\/p>\n<p>Selle \u00f5petusega kaasas olevad failid on GitHubi lahenduse komponentide kaustas originaal- ja paigatud kaustades.<\/p>\n<p><a href=\"https:\/\/github.com\/mattwatsoncodes\/Tutorial-Convert-React-createClass-to-React-Component\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hankige \u00f5petusfailid GitHubist<\/a><\/p>\n<p>Otsisin m\u00e4rkeruutude loendit, mis v\u00f5imaldas mul edastada mitmesuguseid valikuid (sarnaselt sellele, kuidas saate edastada mitu valikut <code>&lt;SelectControl\/&gt;<\/code>WordPressi Gutenbergi valikule). Sisseehitatud <code>&lt;CheckboxControl\/&gt;<\/code>seadmel ei olnud valikut, kuid p\u00e4rast m\u00f5ningast veebist otsimist leidsin <code>[react-checkbox-list](https:\/\/github.com\/sonyan\/react-checkbox-list)<\/code> <a href=\"https:\/\/github.com\/sonyan\/react-checkbox-list\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Sony An<\/a> (saadaval <a href=\"https:\/\/www.npmjs.com\/package\/react-checkbox-list\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>react-checkbox-list<\/code>aadressil npm<\/a> ).<\/p>\n<p>See tegi k\u00f5ik, mida ma tahtsin, kuid p\u00e4rast npm (<code>npm install react-checkbox-list --save<\/code>) kaudu installimist see ei t\u00f6\u00f6tanud. Teadsin, et pean pistikprogrammi paika panema.<\/p>\n<p>Pange t\u00e4hele, et see \u00f5petus h\u00f5lmab olemasolevate <code>React.createClass<\/code>ja <code>React.propTypes<\/code>meetodite lappimist. <a href=\"https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Kui soovite \u00f5ppida, kuidas neid eelistatud kasutusmeetodiga parandada,<\/a> <code>[React.Component](https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/)<\/code> <a href=\"https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vaadake selle teema postitust<\/a>.<\/p>\n<h2>Reaktsioonikomponendi lappimine<\/h2>\n<p>Esimene probleem, millega kokku puutute, on see, et komponenti isegi ei laadita ja teile kuvatakse \u00fcsna vastik <code>Uncaught TypeError: Cannot read property 'array' of undefined<\/code>viga.<\/p>\n<p>Tabamata t\u00fc\u00fcbiviga, m\u00e4\u00e4ratlemata atribuuti massiivi ei saa lugeda<\/p>\n<p>Selle p\u00f5hjuseks on asjaolu, et komponent sisaldab j\u00e4rgmist rida <code>defaultData: React.PropTypes.array,<\/code>ja see <code>React.PropTypes<\/code>on m\u00e4\u00e4ratlemata.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169379-61e80e28d135c.png\" alt=\"Kas React.createClassi komponent on katki? Teeme selle korda!\" \/>React.PropTypes on m\u00e4\u00e4ramata<\/p>\n<p>Reacti dokumentatsiooni natukene uurimine <a href=\"https:\/\/reactjs.org\/docs\/typechecking-with-proptypes.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4itab, et see<\/a> <code>[React.PropTypes](https:\/\/reactjs.org\/docs\/typechecking-with-proptypes.html)<\/code> <a href=\"https:\/\/reactjs.org\/docs\/typechecking-with-proptypes.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kolis Reacti versioonis 15.5 teise paketti<\/a>. See soovitab meil selle asemel kasutada prop-types teeki.<\/p>\n<p>See annab teile isegi lingi <a href=\"https:\/\/www.npmjs.com\/package\/prop-types\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">prop-types teegi npm hoidlasse<\/a>. Nii et l\u00e4hme edasi ja installime prop-types teegi.<\/p>\n<pre><code>npm install --save prop-types\n<\/code><\/pre>\n<p>Impordime oma dokumendi \u00fclaosas <code>prop-types<\/code>raamatukogu. <a href=\"https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Kaasaegne viis selleks lubaks meil kasutada<\/a> <code>[import](https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/)<\/code> <a href=\"https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00fcntaksit<\/a>, kuid praegu j\u00e4\u00e4gem sama s\u00fcntaksi <code>var PropTypes = require('prop-types');<\/code>juurde, mis on lisatud allolevale dokumendile, kus deklareerime <code>React<\/code>. Avadeklaratsioon peaks n\u00fc\u00fcd v\u00e4lja n\u00e4gema umbes selline:<\/p>\n<pre><code>'use strict';\nvar React     = require('react');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n    displayName: 'CheckBoxList',\n\n    propTypes: {\n        defaultData: React.PropTypes.array,\n        onChange: React.PropTypes.func\n    },\n...\n<\/code><\/pre>\n<p>Hea kraam! Sellegipoolest saame <code>'array' of undefined<\/code>veateate. Seda seet\u00f5ttu, et kasutatav s\u00fcntaks on <code>React.PropTypes.array<\/code>ja me lihtsalt deklareerisime, et PropTypes kasutab muutujat <code>PropTypes<\/code>. Nii et lihtne lahendus on leida ja asendada k\u00f5ik <code>React.PropTypes<\/code>eksemplarid <code>PropTypes<\/code>.<\/p>\n<p>Meie avanev koodiplokk peaks n\u00fc\u00fcd v\u00e4lja n\u00e4gema j\u00e4rgmine:<\/p>\n<pre><code>'use strict';\nvar React     = require('react');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n    displayName: 'CheckBoxList',\n\n    propTypes: {\n        defaultData: PropTypes.array,\n        onChange: PropTypes.func\n    },\n...\n<\/code><\/pre>\n<p>N\u00fc\u00fcd on meie PropTypesi probleem lahendatud! V\u00e4rskendame oma komponenti ja vaatame, kas see t\u00f6\u00f6tab.<\/p>\n<p>Ei, n\u00fc\u00fcd saame veast aru<code>Uncaught TypeError: React.createClass is not a function.<\/code><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169379-61e80e28d135c.png\" alt=\"Kas React.createClassi komponent on katki? Teeme selle korda!\" \/><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169379-61e80e29cc727.png\" alt=\"Kas React.createClassi komponent on katki? Teeme selle korda!\" \/>Tabamata t\u00fc\u00fcbiviga: React.createClass ei ole funktsioon.\ufeff<\/p>\n<p>J\u00e4llegi, v\u00e4ike otsing <a href=\"https:\/\/reactjs.org\/blog\/2017\/04\/07\/react-v15.5.0.html#new-deprecation-warnings\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Reacti dokumentatsiooni ja versiooni 15.5.0 v\u00e4ljalaskem\u00e4rkmete \u00fcmber<\/a> n\u00e4itab, et <code>React.createClass<\/code>versioonis 15.5.0 amortiseeriti.<\/p>\n<p>Koos rakendusega <code>React.PropTypes<\/code>muudeti <code>React.createClass<\/code>oma paketiks, kuna <a href=\"https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React Components&#8217;i loomise eelistatud meetod kasutab<\/a> <code>[React.Component](https:\/\/mattwatson.codes\/converting-react-createclass-to-react-component\/)<\/code>.<\/p>\n<p>React.createClassi asendus on n\u00fc\u00fcd omaenda <a href=\"https:\/\/www.npmjs.com\/package\/create-react-class\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">npm-hoidlas kui create-react-class<\/a>. Nii et l\u00e4hme edasi ja installime selle oma konstruktsiooni.<\/p>\n<pre><code>npm install --save create-react-class\n<\/code><\/pre>\n<p>Peame paketi importima oma ehitusse, s\u00e4ilitades j\u00e4llegi s\u00fcntaksi klassikalises vormingus, lisades rea <code>var CreateReactClass = require('create-react-class');<\/code>dokumendi \u00fclaossa, n\u00e4iteks j\u00e4rgmiselt:<\/p>\n<pre><code>'use strict';\nvar React            = require('react');\nvar PropTypes        = require('prop-types');\nvar CreateReactClass = require('create-react-class');\n\nmodule.exports = React.createClass({\n    displayName: 'CheckBoxList',\n\n    propTypes: {\n        defaultData: PropTypes.array,\n        onChange: PropTypes.func\n    },\n...\n<\/code><\/pre>\n<p>J\u00e4llegi, meie viga ei kao, sest peame asendama k\u00f5ik eksemplarid <code>React.createClass<\/code>meie uue imporditud objektiga <code>CreateReactClass<\/code>. See peaks v\u00e4lja n\u00e4gema natuke selline:<\/p>\n<pre><code>'use strict';\nvar React            = require('react');\nvar PropTypes        = require('prop-types');\nvar CreateReactClass = require('create-react-class');\n\nmodule.exports = CreateReactClass({\n    displayName: 'CheckBoxList',\n\n    propTypes: {\n        defaultData: PropTypes.array,\n        onChange: PropTypes.func\n    },\n...\n<\/code><\/pre>\n<p>Ja see ongi k\u00f5ik! Komponent enam ei vea ja meie JavaScripti konsool on kena ja puhas.<\/p>\n<p>Valmis lahendus n\u00e4eb v\u00e4lja umbes selline:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169379-61e80e2b09ef2.gif\" alt=\"Kas React.createClassi komponent on katki? Teeme selle korda!\" \/>Patched Reacti mitme kontrollnimekirja komponent WordPressis Gutenberg<\/p>\n<h2>\u00d5petuse l\u00e4htekood<\/h2>\n<p><a href=\"https:\/\/github.com\/wholesomecode\/Tutorial-Convert-React-createClass-to-React-Component\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Komponendi algse ja paigatud versiooni l\u00e4htekoodi<\/a> saate alla laadida GitHubist. Pistikprogramm sisaldab WordPressi Gutenbergi plokki, mida saate koodiga m\u00e4ngimiseks kasutada kolme failiga, mille saate vajaduse korral kustutada:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169379-61e80e2cbb1fa.png\" alt=\"Kas React.createClassi komponent on katki? Teeme selle korda!\" \/>GitHubi \u00f5ppefailid paiga React.createClass jaoks<\/p>\n<h2>T\u00f5mbetaotluse esitamine algsesse hoidlasse<\/h2>\n<p>Tore asi avatud l\u00e4htekoodiga kogukonna juures on see, et saame vabalt koodi kaasa aidata ja t\u00e4iustada. Siin on <a href=\"https:\/\/github.com\/sonyan\/react-checkbox-list\/pull\/7\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00f5mbetaotlus koos \u00e4sja loodud plaastriga, mille esitasin<\/a> Sony Anile.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kui loote WordPressi Gutenbergi plokke (v\u00f5i isegi kui te seda ei tee), v\u00f5ite proovida panna oma konstruktsioonis t\u00f6\u00f6le kolmanda osapoole reaktsioonikomponent. Aga kui see on vanem element, &#8230;<\/p>\n","protected":false},"author":1,"featured_media":224207,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,916,842],"tags":[1165],"class_list":["post-228196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-muud","category-opetused","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=228196"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228196\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/224207"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}