나는 최신 REACT (현재 React 13/ES5를 사용하고 있습니다)로 업그레이드 할 수 있도록 믹스 인을 HOC로 리팩토링하려고합니다. 구성 요소가로드되면 mixin은 경로가있는 query
속성을 가진 데이터 객체 this.data
에 액세스 할 수 있습니다.React : Higher Order 구성 요소 : 당신은 차일드 상태가 될 수 있습니까?
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
개체 만 있으면됩니다.
나는이 믹스 인을 프로젝트 전체에 뿌렸다. 그것은 실제로 이것보다 훨씬 더 많은 일을합니다. 그러나 나는 단지 그것을 위해서 멍청이로 노력하고 있습니다.
들어 왔어. 나는 data
에서 모든 것을 가져 와서 getInitialState
에 넣었다. 이제 래핑 된 구성 요소의 상태에 data
이 있었으므로 어떻게 액세스합니까? 믹스 인처럼 HOC에서 componentDidMount
을 처리하고 data.query
에 액세스하여 데이터를 가져옵니다. 나는 모든 구성 요소를 다시 작성하여 componentDidMount
을 갖기를 원하지 않습니다.
PS- 일반적으로 mixin이 this.data
을 수행 할 수있는 이유를 알 수 있고 내 구성 요소가 그다지 도움이되지 않는다면 필자는 React와 ES6의 최신 버전을 사용합니다. React의 최신 버전에서는 render()
외부의 객체를 정의 할 수 없습니다.
HoC 코드 –
에 동의하지 않으면이 답변에 동의하지 않을 수 있습니다. 만약 당신이 가장 기본적인 수준에서 대답 할 수 없다면 당신은 어떻게하면 더 복잡해 지도록 대답 할 수 있습니까? – user2465134
그건별로 좋지 않습니다. 귀하의 질문은 귀하가 작성한 방식으로 인해 이해하기가 매우 어려웠습니다. 나는 그것을 읽을 시간이 걸렸고 당신에게 맞는 해결책을 생각해 냈습니다. 막연한 대답을 원하면 하위 구성 요소가 상위 구성 요소와 통신해야하는 표준 패턴을 사용할 수 있습니다. 소품을 통해 어린이에게 물건을 전달하십시오 (소책자로 포장지의 상태를 전달할 수 있음). 자녀가 부모에게 다시 통보해야 할 경우 부모에게 처리기 기능을 전달하게하십시오. –