reactjs - 无法读取 Redux + Firebase 中未定义的属性“名称”
问题描述
问题document
来自 Firestore 无法在 React 组件中显示。最初,我像这样在 Redux 中获取项目。
src/actions/index.js
export function fetchItem(id) {
return dispatch => {
itemsRef.doc(id).onSnapshot(doc => {
usersRef.doc(id).onSnapshot(user => {
statusesRef
.where("uid","==", id)
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(snapshot) {
const allItems = {
item: doc.data(),
user: user.data(),
status: snapshot.data(),
};
dispatch({
type: FETCH_ITEM,
payload: allItems
});
}
}
});
});
};
}
src/reducers/reducer_items.js
import { FETCH_ITEM } from "../actions";
const initialState = {};
export default (state = initialState, action) => {
switch (action.type) {
case FETCH_ITEM:
return action.payload;
default:
return state;
}
};
然后我allItems
用this.props.fetchItem
.
class Item extends Component {
componentDidMount() {
const { id } = this,proops.match.params;
this.props.fetchItem(id);
}
}
render() {
const { item } = this.props;
console.log("item", item);
}
const mapDispatchToProps = {
fetchItem
};
function mapStateToProps({ allItems }) {
return { item: allItems };
}
export default connect(mapStateToProps, mapDispatchToProps)(Item);
控制台中的项目是
item:
Object
item: {name: "XXXXXXXXX", image: "XXXXXXXXXXX"}
status: {content: "XXXXXXXXX"}
user: {name: "XXXXXXXX", image: "XXXXXXXXXXXX"}
我可以成功获取item
项目、用户和状态。但我无法获得儿童文件。
render() {
const { item } = this.props;
console.log("item", item);
console.log("item2", item.item.name);
}
它说Cannot read property 'name' of undefined
。但名称显示在console.log("item")
.
解决方案
我认为这不是最佳实践,但我已经用下面的代码解决了它:
const allItems = {
...doc.data(),
...user.data(),
...snapshot.data(),
};
推荐阅读
- terraform - 错误:角色“arn:aws:iam::<
>:role/sudip_terraform_ec2_role" 不能被假定 - shell - 如果它们包含相同的数字,我如何检查 3 个列表
- bash - 如何为需要 4 个数字输入的 C 程序编写 Bash 脚本?
- php - php我如何在通过curl上传之前重命名文件
- firebase - 如何为 Firebase 分页动态设置快照限制
- node.js - 电子地理定位网络位置提供商
- javascript - 为了使冒泡起作用,子元素甚至需要有一个 eventListener 吗?
- javascript - 登录后如何配置 Firebase UI 以返回上一页
- html - 如何在侧边栏上获取文本以显示在网页上
- javascript - 发送 Bearer 令牌的浏览器原生方式