Я пытаюсь провести рефакторинг от миксинов до HOC, чтобы я мог перейти на новейший React (в настоящее время я использую React 13/ES5). Когда мой компонент загружается, миксин может получить доступ к объекту данных this.data, у которого есть свойство query с маршрутом.
React.createClass({
mixins: [myMixin],
data: {
query: "/api/foo"
},
componentDidUpdate(): function(){
}
...
}
В componentDidMount внутри миксина он запросит этот маршрут, вернет данные и поместит их в состояние.
var myMixin = React.createClass({
componentDidMount(): function(){
this.fetchData(this.data.query)
}
fetchData(query) {
// fetch the data
}
...
}
Это извлекает много шаблонов из моих компонентов. Мне не нужно запускать componentDidMount для каждого компонента, достаточно иметь объект data.
У меня этот миксин разбросан по всему проекту. На самом деле он делает гораздо больше, чем это, но я просто пытаюсь упростить его, например, ради.
Входит HOCs. Я взял все вещи из data и вложил в getInitialState. Теперь, когда у меня есть data в состоянии обернутого компонента, как мне получить к нему доступ? Как и мой миксин, я хочу, чтобы мой HOC обрабатывал мой componentDidMount, получал доступ к data.query и извлекал данные. Я не хочу переписывать каждый компонент, чтобы иметь componentDidMount.
PS- Я обычно использую новейшую версию React и ES6, если кто-нибудь может сказать мне, почему миксин может делать this.data, а мой компонент не может, это было бы очень полезно. В новейшей версии React вы не можете определить объект за пределами render() таким образом.