2016-08-10 2 views
1

Я совершенно новый, чтобы отреагировать так жаль, если это простой вопрос. У меня есть куча компонентов, и для каждого компонента я хотел бы указать начальное состояние для каждого из {b: this.constructor.displayName} («b» должно использоваться при построении имен классов). Вместо определения b в начальном состоянии «getInitialState» в каждом компоненте, я хотел бы определить некоторую функцию многократного использования, чтобы установить b всюду.Как создать функцию повторного использования в React

Из моих ранних исследований кажется, что миксины могут быть многообещающими. Тем не менее, я также читал, что миксины выходят из игры. Каков наилучший способ сделать это? Заранее спасибо!

+1

Вы можете посмотреть в использовании библиотеки как 'redux', это позволит вам иметь глобальное состояние, что все компоненты может получить доступ (если требуется). http://redux.js.org/docs/basics/ExampleTodoList.html - Поначалу может показаться трудным получить голову, но в конце концов вы поймете это :) – James111

+0

mixins уже вышли, особенно если вы хотите использовать ES6 классы (которые делают так, как они работали, в буквальном смысле невозможны). Одна вещь, которую я могу порекомендовать, сначала запускается через учебники React на странице facebook github для React. Они неплохие, и в сочетании с пониманием регулярных JS позволяет вам понять, как делать многое. Реакция не является магии: это просто больше javascript, поэтому применяются те же правила JS: вы можете импортировать любую обычную JS-функцию и запускать ее поверх всего, что нужно, например, в React.createClass. –

ответ

2

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

class Foo extends React.Component { 
    render() { 
     return <div>{ this.props.b }</div>; 
    } 
} 

const EmbedClassName = function(Child) { 
    var b = Child.constructor.displayName; 
    return (props) => <Child {...props} b={b} />; 
}; 

var ComposedFoo = EmbedClassName(Foo); 
Смежные вопросы