亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 React(WordPress 塊編輯器)中使用 setAttributes 設置屬性后

在 React(WordPress 塊編輯器)中使用 setAttributes 設置屬性后

慕田峪9158850 2022-12-18 16:07:16
我正在嘗試通過映射數組來動態創建和更改組件的值。最初一切正常(當我通過默認值映射時),直到我到達應該設置屬性的 setPadding 函數。然后我的數組被更改為對象,使第二個映射拋出錯誤 - react-dom.min.js?ver=16.9.0:103 TypeError: attributes.padding.map is not a function。這是代碼:屬性:padding: {    type: 'array',    default: [        {   name: 'top',            image: `${ url }images/padding-top.svg`,            v: 10,        },        {            name: 'bottom',            image: `${ url }images/padding-bottom.svg`,            v: 10,        },    ],},組件渲染(注意attribiutes.padding被映射 - 這適用于默認值):<PanelBody    title="Test"    initialOpen={ true }>    { attributes.padding.map( ( attr ) => (    <div className="component-row-wrapper margin-padding">        <PanelRow>            <RangeControl                label={                    <img src={ attr.image } alt="" />                }                value={ attr.v }                onChange={ ( value ) => setPadding( attr.name, value ) }                min={ 0 }                max={ 300 }            />        </PanelRow>    </div>    ), ) }</PanelBody>最后是setPadding函數(console.log在函數本身之前——它被放置在edit( props )組件渲染和組件渲染之間):console.log( attributes.padding ); // initially it works fine, after setPadding it logs object instead of array.const setPadding = ( name, value ) => {    const paddingAttr = attributes.padding;    {paddingAttr.map( r => {        if ( name === r.name ) {            r.v = value;        }    } );}    console.log( paddingAttr ); // works fine, being displayed as array every time!    props.setAttributes( {        padding: { paddingAttr }, // saves 'padding' attribute as object 'paddingAttr: Array(2)...' instead of array ??    } );};我在這里做錯了什么?非常感謝你!
查看完整描述

2 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

在你調用的地方props.setAttributes,屬性是一個對象的原因是因為你正在創建一個對象!您需要以下內容:


props.setAttributes( {

  padding: paddingAttr

} );

在MDN上閱讀有關屬性速記符號的更多信息。


此外,正如我所說,您需要修復對Array#map. 將其更改為以下內容:


paddingAttr = paddingAttr.map( r => {

  if ( name === r.name ) {

    r.v = value;

  }

  return r;

} );


查看完整回答
反對 回復 2022-12-18
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

{paddingAttr.map( r => {

    if ( name === r.name ) {

        r.v = value;

    }

} );}

這里,(TypeError的原因:attributes.padding.map is not a function),paddingAttr不是數組,改成


{paddingAttr.default.map( r => {

    if ( name === r.name ) {

        r.v = value;

    }

} );}


查看完整回答
反對 回復 2022-12-18
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號