#reactjs #ecmascript-6
#reactjs #ecmascript-6
Вопрос:
Я использую абстрактный суперкласс для некоторых компонентов React, которые совместно используют методы и некоторые (но не все) реквизиты.
class AbstractStory extends Component { ... }
AbstractStory.propTypes = {
storyForm: PropTypes.string,
timestamp: PropTypes.number
}
class NewContentStory extends AbstractStory { ... }
Я предполагаю, что если проптипы подкласса не отличаются от суперкласса, я могу оставить их необъявленными в подклассе, и они будут унаследованы от суперкласса.
Но, если у подкласса есть дополнительные свойства, есть ли хороший способ объявить их, не переформулируя то, что объявлено в суперклассе? Есть ли какие-либо проблемы при выполнении этого подобным образом?
NewContentStory.propType = {... AbstractStory, newProp: PropTypes.string}
Что делать, если подкласс изменяет свойство, объявленное в суперклассе (делая его обязательным, добавляя форму объекту и т.д.)?
Ответ №1:
Реальный ответ заключается в том, что по соглашению вы на самом деле не хотите расширять компоненты, отличные от React.Component
, поскольку функциональная композиция является основным способом абстракции в React.
Другими словами: вы должны вкладывать компоненты, а не расширять классы в React.
Комментарии:
1. Однако как это отвечает на вопрос? Как избежать дублирования
propTypes
свойств объекта?2. Иногда ответ оказывается не таким, какой вы можете ожидать. Это не делает ответ неправильным.