反应防止子渲染(ajax加载程序等待响应)
我正在尝试编写简单的ajax加载程序,我想知道我是否可以阻止props.childrend在父容器中渲染。问题是孩子们想要渲染,不管加载程序是否想要显示它,也不管渲染是否基于导致错误的ajax数据 例如: 例2: 此示例将产生错误,因为在ajax请求之前未定义This.state.data.user 加载器:反应防止子渲染(ajax加载程序等待响应),ajax,reactjs,Ajax,Reactjs,我正在尝试编写简单的ajax加载程序,我想知道我是否可以阻止props.childrend在父容器中渲染。问题是孩子们想要渲染,不管加载程序是否想要显示它,也不管渲染是否基于导致错误的ajax数据 例如: 例2: 此示例将产生错误,因为在ajax请求之前未定义This.state.data.user 加载器: import React from 'react' export default React.createClass({ getDefaultProps() {
import React from 'react'
export default React.createClass({
getDefaultProps() {
return { text: "Loading", loaded: false };
},
render() {
if(this.props.loaded == false)
return <div>{this.props.text}</div>;
else
return <div>{this.props.children}</div>;
}
})
从“React”导入React
导出默认的React.createClass({
getDefaultProps(){
返回{文本:“加载”,加载:false};
},
render(){
if(this.props.loaded==false)
返回{this.props.text};
其他的
返回{this.props.children};
}
})
使用加载器初始化
import React from 'react'
import Loader from '../helpers/Loader';
import {comm} from '../Comm';
export default React.createClass({
getInitialState() {
return {loaded: false, data: null};
},
componentWillMount(){
comm.get("/xxx/xxx", {json: 1}, (back) => {
console.log(back);
this.setState({loaded: true, data: back});
});
},
render(){
return <Loader loaded={this.state.loaded}>{this.state.data.user.name}</Loader>
});
从“React”导入React
从“../helpers/Loader”导入加载程序;
从“../comm”导入{comm};
导出默认的React.createClass({
getInitialState(){
返回{loaded:false,data:null};
},
组件willmount(){
comm.get(“/xxx/xxx”,{json:1},(back)=>{
控制台日志(返回);
this.setState({loaded:true,data:back});
});
},
render(){
返回{this.state.data.user.name}
});
原因是,最初您定义了data=null
,在ajax调用之前,您正在使用this.state.data.user.name
,它将抛出错误:
无法读取未定义的属性“name”
简单的解决方案是,在没有得到ajax响应之前,您需要对数据进行检查,请检查以下内容:
var Loader=React.createClass({
getDefaultProps(){
返回{文本:“加载”,加载:false};
},
render(){
if(this.props.loaded==false)
返回{this.props.text};
其他的
返回{this.props.children};
}
});
var Hello=React.createClass({
getInitialState(){
返回{loaded:false,data:null};
},
组件willmount(){
设置超时(()=>{
this.setState({loaded:true,data:{user:{name:“login”}});
}, 1000);
},
render:function(){
var user=null;
返回
你好{this.state.data?this.state.data.user.name:null}
;
}
});
ReactDOM.render(
,
document.getElementById('容器')
);
Thx获取答案。但我知道我可以检查变量,我只是不想这么做。我希望“收到数据后”有干净的代码。我知道我可以让这个类与ifs一起工作,我只是想知道,我可以在loader中阻止它们吗。