【发布时间】:2020-12-17 09:07:31
【问题描述】:
我在一个 React Redux 项目中工作。
我的 Reducer 如下所示
statusReducer.js
import { FETCH_STATUS } from "../firebase/types";
export default (state = false, action) => {
switch (action.type) {
case FETCH_STATUS:
return action.payload || null;
default:
return state;
}
};
我的调度员如下所示
Status.js
import firebase from 'firebase/app';
import { todosRef, authRef, provider } from './firebase';
import { FETCH_STATUS, FETCH_ONESTATUS } from './types.js';
const databaseRef = firebase.firestore();
export const fetchStatus = uid => async dispatch => {
var data = [];
databaseRef.collection('status').doc(uid).collection('status').get().then((snapshot) => {
snapshot.forEach((doc) => {
var snap = doc.data();
snap.key = doc.id;
data.push(snap);
console.log(data); // I am getting values here
});
dispatch({
type: FETCH_STATUS,
payload: data,
});
});
};
我的组件如下所示
import React from "react";
import * as actions from './firebase/Status';
import { connect } from 'react-redux';
import { Link } from 'react-router-dom'
class Status extends React.Component {
componentWillMount() {
const { auth } = this.props;
this.props.fetchStatus(auth.uid);
};
renderStatus() {
const { status } = this.props;
const data = status ? Object.values(status) : [];
console.log(status) // I am not getting values here
}
render() {
return (
//more HTML code
);
}
}
const mapStateToProps = ({ auth, status }) => {
return {
auth,
status,
}
}
export default connect(
mapStateToProps,
actions
)(Status);
【问题讨论】:
-
你的减速器状态形状/类型是什么?到处都是。初始值/默认值是布尔值,但如果有效负载是错误的,它将变为
null,并且FETCH_STATUS操作会将其更改为数组。没有一致性,这会使您的状态难以使用和调试,因为它具有不确定性。在您的Status组件中,什么在调用renderStatus以及何时调用?此外,出于所有实际目的,componentWillMount已被弃用,您应该改用componentDidMount。你的组合减速器是什么样的?这是正确的状态形状,state.status? -
感谢@DrewReese 的回复。实际上有人编码了所有这些代码。你能指导我解决这个问题吗?谢谢。
-
当然,我们可以尝试,但我们需要更多的上下文。您能否更新您的问题以包含更多 Minimal, Complete, and Reproducible 代码示例?我们能否查看所有这些组件代码以查看何时何地调用
renderStatus,以及您的减速器和主根减速器,以便我们更好地了解您的状态形状?
标签: reactjs react-redux redux-thunk