[英]Firebase data to React component
I have a React component that I'm trying to pass some props but I get an Uncaught Error: App.render(): A valid React element (or null) must be returned. 我有一个React组件,我正在尝试传递一些道具,但是出现了一个未捕获的错误:App.render():必须返回一个有效的React元素(或null)。 You may have returned undefined, an array or some other invalid object.
您可能返回了undefined,数组或其他无效对象。 when I try to return it inside the snapshot.
当我尝试将其返回到快照中时。
// cache settings data
fire.settings = {};
fire.settings.ref = fire.database.ref('settings');
// main app build
class App extends Component {
render() {
// get values from firebase
fire.settings.ref.on('value', function(data) {
return (<Home settings={data.val()} />);
});
}
}
So I started messing around with generators and I get the component to render, but I just get an empty object in my settings prop. 因此,我开始搞乱生成器,并获得要渲染的组件,但是在我的设置属性中只是得到了一个空对象。
// main app build
class App extends Component {
render() {
// get values from firebase
function* generator() {
fire.settings.ref.on('value', function(data) {
fire.settings.snapshot = data.val();
});
yield fire.settings.snapshot;
}
// init generator and return homepage
let promise = generator();
return (<Home settings={promise.next()} />);
}
}
As well as using componentDidMount() 以及使用componentDidMount()
// main app build
class App extends Component {
componentDidMount() {
this.fire.settings.ref.on('value', function(snapshot) {
this.props.settings = snapshot.val();
}, (error) => console.log(error), this);
}
render() {
return (<Home settings={this.props.settings}/>);
}
}
SOLVED 解决了
Pass the value through the render to the component 通过渲染将值传递给组件
// init render
fire.settings.ref.on('value', function(data) {
ReactDOM.render(
<App settings={data.val()}/>, document.getElementById('app'));
});
export default App;
You are trying to return your element inside callback of a listener which is asynchronous. 您正在尝试在异步的侦听器的回调中返回元素。 Instead of that you should set listener inside
componentDidMount
and call setState
inside the callback. 取而代之的是,您应该在
componentDidMount
内部设置侦听器,并在回调内部调用setState
。
// cache settings data
fire.settings = {};
fire.settings.ref = fire.database.ref('settings');
// main app build
class App extends Component {
constructor(props) {
super(props);
this.state = { data: null };
this.onSettingsChanged = this.onSettingsChanged.bind(this);
}
onSettingsChanged(data){
this.setState({data: data.val()});
}
componentDidMount() {
fire.settings.ref.on('value', this.onSettingsChanged);
}
render() {
return (<Home settings={this.state.data}/>);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.