【发布时间】:2020-06-30 20:21:09
【问题描述】:
我正在通过创建一个 React 应用程序来学习 React(遵循 ~2 个教程)。事情有点乱,所以我想知道这个包含调度程序的函数到底做了什么:
export const fetchProjects = () => async dispatch => {
projectsRef.once("value", snapshot => {
dispatch({
type: 'FETCH_PROJECTS',
payload: snapshot.val()
});
});
};
注意projectRef.once来自fbConfig文件中的这行代码:
const databaseRef = firebase.database().ref();
export const projectsRef = databaseRef.child('projects');
//the setup is working properly because I am succefully writing into the DB in another part of the app
对于上下文:此函数属于“动作”文件。它被另一个名为 ProjectList 的组件使用生命周期方法调用。下面是 ProjectList.js 的全部代码:
import React from 'react'
import ProjectSummary from './ProjectSummary'
import _ from "lodash";
import * as actions from '../../store/actions/projectActions'
import { connect } from "react-redux";
class ProjectList extends React.Component {
constructor(props) {
super(props);
}
renderProjects(){
const { data } = this.props;
const allprojects = _.map(data, (value, key) => {
return <ProjectSummary key={key} project={value} />;
});
if (!_.isEmpty(allprojects)) {
return allprojects;
}
return (
<div className="col s10 offset-s1 center-align">
<h4>You have no projects</h4>
<p>Start by going to New Project and creating a new project</p>
</div>
);
}
componentWillMount() {
this.props.fetchProjects();
}
render() {
return (
<div className="project-list section">
{this.renderProjects()}
</div>
)
}
}
const mapStateToProps = ({ data }) => {
return {
data
};
};
export default connect(mapStateToProps, action)(ProjectList);
这里是具有上述动作的reducer作为案例:
const initState = {
projects: []
}
const projectReducer = (state = initState, action) => {
switch (action.type) {
case 'FETCH_PROJETCS':
return action.payload;
case 'CREATE_PROJECT_SUCCESS':
console.log('create project success');
console.log(action.project);
return state;
case 'CREATE_PROJECT_ERROR':
console.log('create project error');
return state;
default:
return state;
}
};
export default projectReducer;
我的问题是我不明白初始 fetchProjects 方法中的“有效负载”在哪里(它是在更新状态吗?是状态的哪一部分?)。应用程序的这一部分没有按预期工作(我无法从数据库加载数据)。感谢您为解决此问题提供的任何帮助。
【问题讨论】:
标签: reactjs firebase redux redux-thunk dispatcher