【发布时间】:2020-02-07 08:47:31
【问题描述】:
问题是来自 Firestore 的 document 无法在 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;
}
};
然后我用this.props.fetchItem 获取allItems。
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")。
【问题讨论】:
-
过去你从这个
console.log("item", item)得到的对象 -
在控制台中添加了
item。
标签: reactjs firebase redux google-cloud-firestore