Я недавно начал создавать пользовательские блоки для редактора Гутенберга. У меня есть опыт работы с PHP и JS, но немного с JSX. Я пытаюсь добиться в моем блоке следующей вещи. Я хочу три текстовых ввода для заголовков. Я сделал один, и он отлично работает, но я еще не понял, как использовать этот компонент для следующих двух. Теперь, когда введите текст для заголовка один, два других имеют тот же текст.
//This is my attribute
export const BlockTitleAttributes = {
blockTitle: {
type: 'string',
},
};
export const BlockTitleOutPut = ( props ) => {
if(! props.attributes.blockTitle){
return null;
}
return (
<h2 className={'heading--title'}>{props.attributes.blockTitle}</h2>
);
};
import { BlockTitleAttributes } from './attributes';
import { BlockTitleOutPut} from './title';
export {
BlockTitleAttributes,
BlockTitleOutPut,
}
const { __ } = wp.i18n;
const { Component } = wp.element;
const { PlainText } = wp.editor;
export default class BlockTitle extends Component {
onChangeBlockTitle = value => {
const { setAttributes } = this.props;
setAttributes( { blockTitle: value});
};
render(){
return(
<h2>
<PlainText
value ={ ! this.props.attributes.blockTitle ? '' : this.props.attributes.blockTitle}
onChange = { this.onChangeBlockTitle}
placeholder = { this.props.placeholder ? this.props.placeholder : __('Block Title')}
/>
</h2>
);
}
}
import BlockTitle, { BlockTitleAttributes, BlockTitleOutPut } from "./components";
const { RichText, MediaUpload, PlainText } = wp.editor;
const { registerBlockType } = wp.blocks;
const { __ } = wp.i18n;
registerBlockType( 'cgb/block-simple-steps', {
title: 'Simple Steps',
icon: 'align-left',
category: 'common',
keywords: ['rento', 'simple-steps', 'block'],
attributes: {
...BlockTitleAttributes,
},
edit: props => {
return (
<section className="container">
<BlockTitle
{ ...props}
/>
<BlockTitle
{ ...props}
/>
<BlockTitle
{ ...props}
/>
</section>
);
},
save: props => {
return (
<section id="feature" className={'feature feature-1 text-center bg-white pb-90'}>
<div className={'container'}>
<div className={'row'}>
<div className={'col-xs-12 col-sm-12 col-md-12'}>
<div className={'heading heading-2 text-center mb-70'}>
<BlockTitleOutPut
{...props}
/>
<BlockTitleOutPut
{...props}
/>
<BlockTitleOutPut
{...props}
/>
</div>
</div>
</div>
</div>
</section>
);
}
});