gpt4 book ai didi

javascript - 在 ComponentWillMount 之前渲染

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:54:50 26 4
gpt4 key购买 nike

我试图在 ReactJs 中渲染我的组件之前加载一些初始数据。我还在这个过程中使用 Flux 架构。这是我的容器:

class MemoryApp extends React.Component {
constructor(props){
super(props);
MemoryActions.getInit();
this.state = {};

}

componentWillMount(){
MemoryStore.on("init", () => {
this.setState({
memory: MemoryStore.getInit()
});
})
}

render(){
return (
<div>
<button type="button">Get Random Memory</button>
<h1>Memory App</h1>
<MemoryImage memory={this.state.memory}/>
<MemoryText memory={this.state.memory}/>
</div>
);
}
}

所以在这个文件中,我调用了 getInit() 操作,它调用 API 来获取一些数据。收到此数据后,store 将发出 init 事件:

class MemoryStore extends EventEmitter {

getInit(){
return this.memory_response;
}

initLoad(response){
this.memory_response = response;
this.emit("init");
}

handleActions(action){

switch (action.type) {
case MemoryConstants.GET_INIT_RESPONSE:{
this.initLoad(action.response);
break;
}
default:{
return true;
}
}
}

}

const memoryStore = new MemoryStore();
dispatcher.register(memoryStore.handleActions.bind(memoryStore));
export default memoryStore;

然后,如您所见,我们随后在 componenWillMount() 中设置了状态。然后我想渲染组件。其中一个组件是 image:从“ react ”导入 react

export default class MemoryImage extends React.Component{
renderItems(){

console.log(this.props); // ===> Here is my console.log
if (this.props.memory){
return this.props.memory[0].description;
} else {
return "Nothing";
}
}

renderImage(){
if (this.props.memory){
return this.props.memory[0].image;
} else {
return "Nothing";
}
}

render(){
return(
<div>
<p>{this.renderItems()}</p>
<img style={{width:'200px'}} src={this.renderImage()} alt="none"/>
</div>
);
}
}

登录到控制台后...

memory-image.js:10 {memory: undefined}
memory-image.js:10 {memory: Array(1)}

在我看来,组件是在我在 componentWillMount() 函数中设置状态之前渲染的。我不想要这个,我只希望组件在 componentWillMount() 中设置状态后呈现。有什么想法吗?

最佳答案

是的,它被渲染了,因为就在组件挂载之前,您只需添加一个事件监听器:

MemoryStore.on("init", () => {
this.setState({
memory: MemoryStore.getInit()
});
})

返回(事件之前)并呈现的函数。

最简单的解决方案 (IMO) 是:

getMemoryItems() {
if (this.state.memory) {
return <div>
<MemoryImage memory={this.state.memory}/>
<MemoryText memory={this.state.memory}/>
</div>
}
}

render(){
return (
<div>
<button type="button">Get Random Memory</button>
<h1>Memory App</h1>
{ this.getMemoryItems() }
</div>
);
}

或者你可以这样做:

render(){
return (
<div>
<button type="button">Get Random Memory</button>
<h1>Memory App</h1>
{ this.state.memory ? <MemoryImage memory={this.state.memory}/> : '' }
{ this.state.memory ? <MemoryText memory={this.state.memory}/> : '' }
</div>
);
}

关于javascript - 在 ComponentWillMount 之前渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47102834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com