Я обнаружил, что пишу код, подобный этому, для группы компонентов, которые имеют некоторую общность:
class PropertyBlock extends React.Component {
render() {
const { headtext, blockType, selectedId, selectOptions, onChange, extratext } = this.props
return (
<div className='propblk'>
<div className='headline'>{headtext}</div>
{blockType == 'dropdown' ? <PropBlk_Dropdown selectOptions={selectOptions} selectedId={selectedId} onChange={onChange} />
:
blockType == 'inp_line' ? <PropBlk_InputLine value={selectedId} onChange={onChange} />
:
blockType == 'inpstory' ? <PropBlk_InputStory value={selectedId} onChange={onChange} extratext={extratext} />
:
blockType == 'showline' ? <PropBlk_ShowLine value={selectedId} lines={selectOptions} />
:
blockType == 'inp_date' ? <PropBlk_InputDate value={selectedId} onChange={onChange} />
:
blockType == 'inp__chk' ? <PropBlk_Checkbox value={selectedId} onChange={onChange} extratext={extratext} />
:
<div>
{selectedId}
</div>
}
</div>
)
}
}
Но почему-то я думал, что может быть лучше. Я думал о компоненте parent
и множестве специализированных компонентов child
, которые наследуются от этого родителя. как:
class PropBlk_Type1 extends PropertyParentBlock {
...
}
Однако, читая В React , кажется, что следует избегать наследования. Итак, я попробовал что-то в соответствии с примером React, как это:
class PropertyParentBlock extends React.Component {
render() {
const { headtext, myownhtml } = this.props
return (
<div className='propblk'>
<div className='headline'>{headtext}</div>
{myownhtml}
</div>
)
}
}
class PropBlk_Type1 extends React.Component {
render() {
const { headtext, value, onChange, extratext } = this.props
return (
<PropertyParentBlock headtext={headtext}
myownhtml={(
<div>
<input value={value} onChange={(e) => onChange(e.target.value)} />
</div>
)}
/>
)
}
}
Таким образом, специализированный html загружается в родительский компонент как свойство myhtml
. Создание этого с помощью WebPack не дало никаких синтаксических ошибок, и на самом деле выполнение этого создает желаемый HTML, и это, кажется, работает.
Поскольку я все еще изучаю React, мне интересно, нахожусь ли я на правильном пути, или что есть лучшие способы и лучшие практики для такого рода наследования или композиции.