2016-08-02 9 views
0

Итак, у меня есть BaseComponent.jsx, который я распространяю на многие из моих компонентов. Это отлично работает.React: как получить доступ к базовому классу из компонентов более высокого порядка

class BaseComponent extends React.Component { 
    constructor(props){ 
     super(props) 
     this.something = true 
    } 
} 

class OtherComponent extends BaseComponent { 
    constructor(props){ 
     super(props) 
     console.log(this.something) // true 
    } 
} 

Но теперь мне нужно использовать withRouter(component) из react-router который оборачивает ваш компонент в более высоком компоненте порядка и украшающей ваш класс.

Так я это сделать:

class OtherComponent extends BaseComponent { 
    constructor(props){ 
     super(props) 
     console.log(this.something) // undefined 
    } 
} 

export default withRouter(OtherComponent) 

Проблема заключается в том, что теперь я не могу получить доступ к свойствам от BaseComponent и тех, вернуть undefined.

Как это решить, чтобы я мог создать HoC и в то же время получить доступ к свойствам базового класса?

+0

Я не вижу такого же поведения. Я создал скрипку на основе вашего примера, и она корректно записывает 'true'. Добавьте, что он должен работать так, как вы описали, и эта сценария иллюстрирует, поскольку HoC не изменяют компонент, который они составляют. https://jsfiddle.net/okpLvu3e/ – ryanjduffy

+0

Эй, @ RyanDuffy, этот простой пример работает, но когда вы начинаете добавлять детей и т. д., это не так. Проверьте это: https://github.com/reactjs/react-router/issues/3514 Они просто не рекомендуют расширять React.Component. – Pier

+0

Можете ли вы достичь того, чего хотите с составом компонентов? Подразделение не рекомендуется при разработке компонентов React. – loganfsmyth

ответ

-1

Расширение компонентов React не рекомендуется команде React. Даже если он работает в некоторых случаях, результаты непредсказуемы, когда вы делаете более интересные вещи, такие как компоненты более высокого порядка.

Следует избегать общих расширяющих классов компонентов, и даже при их использовании не следует использовать на «умных» подключенных компонентах - предпочитайте состав над наследованием для компонентов React.

И

Вы не можете реализовать общую Hoc, который расширяет компонент по той простой причине, что Hoc должен работать со всеми тремя формами Реагировать декларации компонентов.

Источник: https://github.com/reactjs/react-router/issues/3514

Таким образом, ответ на мой вопрос просто, что это не может быть сделано, и я должен перейти к композиции вместо наследования.

 Смежные вопросы

  • Нет связанных вопросов^_^