Я пытаюсь динамически создавать и изменять значения компонентов с отображением массива. Сначала все работает нормально (когда я отображаю значения по умолчанию), пока я не доберусь до функции 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 ??
} );
};
Что я здесь делаю не так?
Большое спасибо!