В React, при наследовании PropTypes, как мне избежать дублирования?

#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. Иногда ответ оказывается не таким, какой вы можете ожидать. Это не делает ответ неправильным.