javascript - Home(...):渲染没有返回任何内容。这通常意味着缺少 return 语句。或者,不渲染任何内容,返回 null
问题描述
我想把所有东西都documents
存储在firebase中。如果有超过 0 个文档,则 render 1
,否则打印no doc found
但是这给了我错误:
render() {
firebase
.firestore()
.collection("users")
.doc(localStorage.getItem("ph"))
.collection("chat")
.get()
.then(d => {
this.dt = d.docs.length;
if (this.dt > 0) {
return <div>1</div>;
} else {
return (
<div>
<div className="app-noFoundArea">
<img src={noFound} />
</div>
<div className="app-noFound-title">
<p>
No chat found. Try create using{" "}
<button className="app-add-icon app-nofound">
<i className="material-icons">add</i>
</button>
</p>
</div>
</div>
);
}
})
.catch(e => {});
}
解决方案
获取数据可能不是一个好主意render
,因为每次更新state
或props
更新时都会发生这种情况。它也是异步的,因此 React 实际上不会返回任何内容来渲染。
你最好把firebase逻辑放在componentDidMount
:
class MyComponent extends React.Component {
state = { loaded: false, docs: [] };
componentDidMount() {
firebase
.firestore()
.collection("users")
.doc(localStorage.getItem("ph"))
.collection("chat")
.get()
.then(d => {
this.setState({ loaded: true, docs: d });
})
.catch(e => {
this.setState({ loaded: true });
});
}
render() {
const { loaded, docs } = this.state;
if (!loaded) {
return null;
}
if (docs.length > 0) {
return <div>1</div>;
} else {
return (
<div>
<div className="app-noFoundArea">
<img src={noFound} />
</div>
<div className="app-noFound-title">
<p>
No chat found. Try create using{" "}
<button className="app-add-icon app-nofound">
<i className="material-icons">add</i>
</button>
</p>
</div>
</div>
);
}
}
}
推荐阅读
- c# - 如何通过 Selenium 根据 html 点击按钮?
- java - 从文件加载 sqlite3 db 的 Java 系统命令失败
- android - 以编程方式将 2+ 个文本字段并排放置在 LinearLayout(水平)中
- reactjs - 为什么父道具不会在动态创建的子组件中更新(生成一次)
- javascript - Javascript中的最佳方法速写或短路
- kotlin - Kotlin 环境价值观
- windows-installer - 如何预先设置属性中未定义的 MSI SecureCustomProperties 以允许静默安装?
- python - 如何检查没有子字符串?
- bash - OSX bash 最小化窗口
- c++ - 现代计算机上的双倍和浮点内存分配