{"id":233852,"date":"2023-02-24T14:13:00","date_gmt":"2023-02-24T11:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233852"},"modified":"2022-11-11T12:47:51","modified_gmt":"2022-11-11T09:47:51","slug":"skapa-anpassat-gutenberg-block-del-3-rekvisita-och-wordpress-komponenter","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/skapa-anpassat-gutenberg-block-del-3-rekvisita-och-wordpress-komponenter\/","title":{"rendered":"Skapa anpassat Gutenberg-block &#8211; Del 3: Rekvisita och WordPress-komponenter"},"content":{"rendered":"\n<p>Det <a href=\"https:\/\/awhitepixel.com\/blog\/wordpress-gutenberg-create-custom-blocks-part-2-register-block\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6reg\u00e5ende steget<\/a> i denna handledningsserie gick igenom hur man registrerar ett anpassat block, b\u00e5de i Javascript och i PHP. I det h\u00e4r steget kommer vi att l\u00e4ra oss hur man anv\u00e4nder WordPress komponenter f\u00f6r att l\u00e4gga till olika typer av f\u00e4lt och inst\u00e4llningar.<\/p>\n<p>F\u00f6r att kunna anv\u00e4nda WordPress komponenter i v\u00e5rt block beh\u00f6ver vi f\u00f6rst veta om rekvisita.<\/p>\n<h2>Rekvisita<\/h2>\n<p>Props \u00e4r en viktig funktion i React och \u00e4r i grunden ett s\u00e4tt att \u00f6verf\u00f6ra variabler eller funktioner till andra komponenter. Om du inte \u00e4r bekant med React-rekvisita kan du l\u00e4sa <a href=\"https:\/\/reactjs.org\/docs\/components-and-props.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Reacts officiella handledning<\/a> om detta.<\/p>\n<p>WordPress tillhandah\u00e5ller n\u00e5gra rekvisita f\u00f6r <code>edit<\/code>och <code>save<\/code>funktioner i <code>registerBlockType()<\/code>. Inuti dessa rekvisita f\u00e5r vi tillg\u00e5ng till kritiska saker, s\u00e5som attribut och en metod f\u00f6r att uppdatera v\u00e5ra attribut. Vi kommer att g\u00e5 igenom attribut i detalj i <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-gutenberg-blocks-part-4-attributes\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4sta steg<\/a>! <\/p>\n<p>Hittills i v\u00e5rt block har vi skrivit funktionen f\u00f6r <code>edit<\/code>och <code>save<\/code>s\u00e5 h\u00e4r:<\/p>\n<pre><code>edit:() =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n},<\/code><\/pre>\n<p>Du b\u00f6r v\u00e4nja dig vid att l\u00e4gga till parametern <code>props<\/code>till b\u00e5de <code>edit<\/code>och <code>save<\/code>, som s\u00e5:<\/p>\n<pre><code>edit: (props) =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n},<\/code><\/pre>\n<p>Nu har du full tillg\u00e5ng till variabeln <code>props<\/code>och allt den inneh\u00e5ller inifr\u00e5n <code>edit<\/code>och <code>save<\/code>. Om du \u00e4r nyfiken kan du l\u00e4gga till ett <code>console.log(props);<\/code>i <code>edit<\/code>funktionen f\u00f6re <code>return<\/code>p\u00e5st\u00e5endet. Du b\u00f6r se vilka rekvisita som finns tillg\u00e4ngliga i konsolfels\u00f6karen.<\/p>\n<h2>Anv\u00e4nder WordPress-komponenter<\/h2>\n<p>Som tidigare n\u00e4mnts har vi tillg\u00e5ng till ett enormt bibliotek av komponenter och anv\u00e4ndbara funktioner i det globala paketet <code>wp<\/code>. Du hittar f\u00e4rdiga komponenter f\u00f6r alla typer av ing\u00e5ngsrelaterade komponenter du kan t\u00e4nka dig. Exempel inkluderar textinmatning, rik textinmatning, rullgardinsmenyer, v\u00e4xlar, kryssrutor, knappar i olika stilar, mediauppladdningsverktyg och f\u00e4rgv\u00e4ljare. Det finns \u00e4ven funktioner och komponenter f\u00f6r mer avancerad funktionalitet. Som att fr\u00e5ga WordPress efter inneh\u00e5ll (inl\u00e4gg, kategorier, etc) med antingen inbyggda funktioner eller h\u00e4mtning med REST API.<\/p>\n<p>Det \u00e4r b\u00e5de enklare och rekommenderat att anv\u00e4nda WordPress UI-komponenter. Detta f\u00f6r att se till att designen och funktionaliteten \u00e4r s\u00e5 str\u00f6mlinjeformad som m\u00f6jligt f\u00f6r att inte f\u00f6rvirra eller irritera anv\u00e4ndarna.<\/p>\n<p>Men i skrivande stund \u00e4r dokumentationen f\u00f6r Gutenberg tyv\u00e4rr v\u00e4ldigt knapp. Jag har hittat det b\u00e4sta s\u00e4ttet att l\u00e4ra mig om vad som finns i <code>wp<\/code>paketet och hur komponenterna faktiskt fungerar genom att titta i deras officiella <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Gutenberg Github-repo<\/a>. Vissa av paketen (mapparna) har en readme-text som erbjuder lite dokumentation. Ta en titt p\u00e5 readme f\u00f6r en <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\/button\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">knapp<\/a> eller <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\/toggle-control\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00e4xeln<\/a> till exempel.<\/p>\n<p>Github-repo ska motsvara vad som finns inuti <code>wp<\/code>paketet (beroende p\u00e5 vilken version du har och vilken gren du tittar p\u00e5 i Github). Detta inneb\u00e4r att varje mapp du ser i rotkatalogen <code>packages<\/code>i Github finns i det globala <code>wp<\/code>paketet. Som ett exempel kom ih\u00e5g att funktionen vi anv\u00e4nde i f\u00f6reg\u00e5ende steg, <code>registerBlockType()<\/code>, var inuti <code>wp.blocks<\/code>, vilket betyder att du hittar k\u00e4llkoden f\u00f6r denna funktion exporterad inom <code>packages\/blocks\/<\/code>.<\/p>\n<p>Eftersom jag har utvecklat ett antal anpassade Gutenberg-block och gr\u00e4vt en hel del i Github-repo, har jag uppt\u00e4ckt att det finns n\u00e5gra paket som inneh\u00e5ller den vanligaste funktionaliteten som anv\u00e4nds f\u00f6r att skapa anpassade block. Jag tar med dem nedan.<\/p>\n<p>F\u00f6r en mer komplett \u00f6versikt \u00f6ver tillg\u00e4ngliga komponenter rekommenderar jag att du laddar ner min gratis e-bok som t\u00e4cker tillg\u00e4ngliga komponenter i Gutenberg! Den inneh\u00e5ller de vanligaste och mest anv\u00e4ndbara komponenterna med dokumentation om rekvisita och kodexempel:<\/p>\n<h3>En snabb \u00f6versikt \u00f6ver de vanligaste paketen du kommer att anv\u00e4nda f\u00f6r block<\/h3>\n<p>Uppenbarligen finns det mycket mer tillg\u00e4ngligt, men nedan \u00e4r det som \u00e4r vanligast f\u00f6r blockutveckling. Vi kommer att anv\u00e4nda de flesta om inte alla av dessa i denna handledningsserie. N\u00e4r du vill anv\u00e4nda en komponent m\u00e5ste du veta i vilket paket den finns.<\/p>\n<h4>wp.components<\/h4>\n<p>Du hittar de flesta UI-ing\u00e5ngskomponenter inuti <code>wp.components<\/code>. Exempel \u00e4r olika textinmatning, markering, kryssrutor, radioknappar, dragbara komponenter, knappar, f\u00e4rgv\u00e4ljare, datumv\u00e4ljare och s\u00e5 vidare. Du hittar ocks\u00e5 UI-komponenter som du kan anv\u00e4nda f\u00f6r blockverktygsf\u00e4ltet och inneh\u00e5llet i sidof\u00e4ltet f\u00f6r inst\u00e4llningar (kallas InspectorControls) i editorn.<\/p>\n<p>Kolla in mapparna i <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Github-repo<\/a>.<\/p>\n<h4>wp.blockEditor och wp.editor<\/h4>\n<p>I dessa tv\u00e5 paket hittar du anv\u00e4ndbara komponenter f\u00f6r rik text, hantering av bilder\/mediauppladdning och komponenter f\u00f6r att faktiskt l\u00e4gga till verktygsf\u00e4lt eller anpassade Inspector-paneler (sidof\u00e4lt).<\/p>\n<p>I slutet av den h\u00e4r serien kommer vi att titta p\u00e5 att bygga dynamiska block d\u00e4r vi kommer att anv\u00e4nda PHP f\u00f6r att rendera blockutdata, och f\u00f6r det kommer vi att anv\u00e4nda en komponent fr\u00e5n <code>wp.editor<\/code>.<\/p>\n<p>Som jag f\u00f6rst\u00e5r det b\u00f6rjade de flesta komponenter i <code>wp.editor<\/code>tidiga Gutenberg-dagar, men s\u00e4rskilt efter WordPress 5.3 flyttades m\u00e5nga av dem till <code>wp.blockEditor<\/code>. Om du anv\u00e4nder en komponent <code>wp.editor<\/code>som WordPress planerar att flytta in i <code>wp.blockEditor<\/code>kommer den inte att misslyckas fr\u00e5n och med nu, men i konsolfels\u00f6kning kommer du att f\u00e5 varningar om att den har blivit utfasad och att du b\u00f6r byta till <code>wp.blockEditor<\/code>n\u00e4r du kan. Och reversibelt om du f\u00f6ljer den h\u00e4r serien med en \u00e4ldre WordPress-version av n\u00e5gon anledning kan du st\u00f6ta p\u00e5 fel n\u00e4r du anropar komponenter som inte har flyttats till <code>wp.blockEditor<\/code>\u00e4nnu.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151760-61e4cf23c1355.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151760-61e4cf23c1355.png\" alt=\"Skapa anpassat Gutenberg-block - Del 3: Rekvisita och WordPress-komponenter\" ><\/a><\/p>\n<h4>wp.element<\/h4>\n<p>Inuti <code>wp.element<\/code>hittar du komponenter som motsvarar React-komponenter. Till exempel <code>Component<\/code>(som motsvarar <code>React.Component<\/code>) och <code>Fragment<\/code>( <code>React.Fragment<\/code>). Vi kommer att anv\u00e4nda dessa n\u00e4r vi b\u00f6rjar dela upp v\u00e5r kod i separata komponenter.<\/p>\n<h4>wp.i18n<\/h4>\n<p>Som namnet anger <code>wp.i18n<\/code>inneh\u00e5ller paketet funktioner f\u00f6r hantering av \u00f6vers\u00e4ttning. Den inneh\u00e5ller samma \u00f6vers\u00e4ttningsfunktioner som vi k\u00e4nner till dem i PHP; till exempel <code>__()<\/code>och <code>_e()<\/code>. Vi kommer att titta p\u00e5 detta i detalj i &lt;&lt;&lt;&gt;&gt;&gt;&gt; n\u00e4r vi l\u00e4r oss hur man \u00f6vers\u00e4tter v\u00e5rt block.<\/p>\n<h4>wp.data<\/h4>\n<p>Paketet <code>wp.data<\/code>\u00e4r till f\u00f6r att fr\u00e5ga WordPress efter data utanf\u00f6r editorn. Det finns komponenter f\u00f6r att skicka meddelanden, <code>withSelect<\/code>och <code>select<\/code>som vi kommer att anv\u00e4nda senare i den h\u00e4r serien f\u00f6r att s\u00f6ka efter inl\u00e4gg i v\u00e5rt block.<\/p>\n<h4>wp.compose<\/h4>\n<p>Det tidigare paketet och <code>wp.compose<\/code>\u00e4r f\u00f6r mer avancerad blockbyggnad. Inuti detta paket hittar vi komponenter och funktioner f\u00f6r att skapa s\u00e5 kallade komponenter av h\u00f6gre ordning. <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Komponenter av h\u00f6gre ordning<\/a> \u00e4r en m\u00f6nsterteknik i React f\u00f6r att \u00e5teranv\u00e4nda komponenter och logik, och vi kommer att anv\u00e4nda detta i kombination med <code>wp.data<\/code>f\u00f6r att fr\u00e5ga inl\u00e4gg.<\/p>\n<h2>Nog prat \u2013 hur anv\u00e4nder du n\u00e5gra av dessa komponenter i praktiken?<\/h2>\n<p>Som n\u00e4mnts tidigare; f\u00f6r att kunna anv\u00e4nda WordPress komponenter m\u00e5ste du veta var de finns. F\u00f6rhoppningsvis kommer min \u00f6versikt ovan i kombination med <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Github-repo<\/a> att ge dig en uppfattning om var du kan f\u00e5 tag i dem.<\/p>\n<p>Gl\u00f6m inte att du alltid kan l\u00e4gga till alla vanliga HTML-taggar, som div, span, rubriker och s\u00e5 vidare. Kom bara ih\u00e5g att f\u00f6lja <a href=\"https:\/\/reactjs.org\/docs\/dom-elements.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Reacts riktlinjer<\/a> i attribut. Till exempel <code>class<\/code>\u00e4r ett reserverat nyckelord i React (f\u00f6r att skapa klassbaserade komponenter), s\u00e5 om du vill l\u00e4gga till en klass till ett HTML-element m\u00e5ste du anv\u00e4nda <code>className<\/code>.<\/p>\n<p>Obs: Gl\u00f6m inte <code>npm run start<\/code>att kompilera din kod under utvecklingen.<\/p>\n<p>Som ett enkelt exempel, l\u00e5t oss prova n\u00e5gra komponenter f\u00f6r att se hur de ser ut. Vi destrukturerar dem fr\u00e5n deras motsvarande paket och anv\u00e4nder dem i v\u00e5r <code>edit<\/code>funktion.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { RichText } = wp.blockEditor;\nconst { TextControl, TextareaControl } = wp.components;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    ...\n    edit: (props) =&gt; { \n        return (&lt;div&gt;\n                Text input:\n                &lt;TextControl \/&gt; \n                Textarea:\n                &lt;TextareaControl \/&gt;\n                Richtext:\n                &lt;RichText \/&gt;\n            &lt;\/div&gt;\n        );\n    },\n    ...\n});<\/code><\/pre>\n<p>Detta kommer till exempel att resultera i att v\u00e5rt block ser ut s\u00e5 h\u00e4r i editorn.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151760-61e4cf248ce0b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151760-61e4cf248ce0b.png\" alt=\"Skapa anpassat Gutenberg-block - Del 3: Rekvisita och WordPress-komponenter\" ><\/a><\/p>\n<p>Du kommer att m\u00e4rka att du kommer att f\u00e5 felmeddelanden i konsolen n\u00e4r du skriver i dem, och att det inte kommer att spara det du skriver in n\u00e4r du uppdaterar inl\u00e4gget (och uppdaterar). Detta beror p\u00e5 att vi saknar rekvisita p\u00e5 komponenterna som \u00e4r kopplingen till attribut, d\u00e4r all v\u00e5r blockdata lagras. Rekvisitan ansvarar f\u00f6r att skicka de sparade v\u00e4rdena och funktioner som ansvarar f\u00f6r att uppdatera v\u00e5ra attribut n\u00e4r n\u00e5got \u00e4ndras i v\u00e5ra ing\u00e5ngar. Detta \u00e4r vad vi kommer att g\u00f6ra i n\u00e4sta steg, d\u00e4r vi \u00e4ntligen ska b\u00f6rja skriva lite kod p\u00e5 riktigt.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I f\u00f6reg\u00e5ende steg registrerade vi ett anpassat Gutenberg-block. I det h\u00e4r steget kommer vi att l\u00e4ra oss hur du anv\u00e4nder WordPress-komponenter f\u00f6r att l\u00e4gga till olika typer av inst\u00e4llningar.<\/p>\n","protected":false},"author":1,"featured_media":151761,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[901,724,942,942,848,901,1110,818,818,848,724,868,868],"tags":[1173],"class_list":["post-233852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-utvecklaren","category-gutenberg-9","category-handledningar","category-n-a","category-plugins-3","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233852"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233852\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/151761"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}