我正在使用 React 并且我正在尝试了解生命周期。我正在做一个componentWillMount方法,以便props在渲染发生之前获得我需要的东西。我需要知道如何在视图加载时更新状态。
我所要做的只是一个GET请求,以获得赌场游戏的经销商列表。基本上,我缺少 1 或 2 个步骤,用于在 DOM 中呈现经销商列表
我将展示我正在用我的代码做什么,然后我将解释我想要什么
动作部分
getDealerActions.js
class GetDealersActions {
constructor () {
this.generateActions('dealerDataSuccess', 'dealerDataFail');
}
getDealers (data) {
const that = this;
that.dispatch();
axios.get('someroute/get-dealers/get-dealers')
.then(function success (response) {
that.actions.dealerDataSuccess({...response.data});
})
}
};
然后我们去商店
getDealersStore.js
class GetDealersStore {
constructor () {
this.state = {
dealerData : null,
};
}
@bind(GetDealersActions.dealerDataSuccess)
dealerDataSuccess (data) {
this.setState({
dealerData : data,
});
console.log(this.state.dealerData);
}
}
在这种情况下,console.log(this.state.dealerData);返回这样的东西,这正是我需要的
Object {dealersData: Array[3]}
问题出在组件部分,老实说,因为我不知道如何处理这里的数据
@connectToStores
export default class Dealers extends Component {
static contextTypes = {
router : React.PropTypes.func,
}
constructor (props) {
super(props);
this.state = {}
}
static getStores () {
return [ GetDealersStore ];
}
static getPropsFromStores () {
return GetDealersStore.getState();
}
componentWillMount () {
console.log('@@@', this.props);
GetDealersActions.getDealers();
}
render () {
console.log('>>>', this.props);
let content;
if (this.state.dealerData) {
content = this.state.dealerData.map((item) => {
return <div key={item.CardId}>{item}</div>;
});
} else {
content = <div>Loading . . .</div>;
}
return (
<div>
<div>{content}</div>
</div>
);
}
}
我来到这里<div>{content}</div>只是Loading . . .因为它this.state是这样来的Object {}
我遇到的一个奇怪的情况是,这个视图渲染了两次,第一次渲染,console.log('>>>', this.props);返回这个>>> Object {params: Object, query: Object},第二次渲染,触发这个>>> Object {params: Object, query: Object, dealerData: Object},这正是我需要的。
那么,为什么componentWillMount要等待渲染方法才能被解雇?