Reactjs render方法中的Redux状态为null,即使在Redux状态正确更新之后也是如此
我正处于react的学习阶段,正在创建一个小应用程序,从firebase表中获取用户愿望列表并更新redux存储,我试图在render方法中访问该redux存储,但当我在render方法中console.logthis.props.wishlist时,其显示为空。Redux状态已正确更新。使用redx开发工具进行检查。 从firebase API获取愿望列表数据的操作创建者Reactjs render方法中的Redux状态为null,即使在Redux状态正确更新之后也是如此,reactjs,react-redux,Reactjs,React Redux,我正处于react的学习阶段,正在创建一个小应用程序,从firebase表中获取用户愿望列表并更新redux存储,我试图在render方法中访问该redux存储,但当我在render方法中console.logthis.props.wishlist时,其显示为空。Redux状态已正确更新。使用redx开发工具进行检查。 从firebase API获取愿望列表数据的操作创建者 export const fetchWishlist = (email)=> { return dispa
export const fetchWishlist = (email)=> {
return dispatch => {
dispatch(fetchWishlistStart());
let rawMovieId=[];
let uniqueMovieIdList = [];
const queryParams ='?orderBy="email"&equalTo="'+email+'"';
axios.get('https://movie-project-6fc34.firebaseio.com/wishlist.json'+queryParams)
.then (response=>{
for(let key in response.data){
rawMovieId.push(response.data[key].movieId)
}
uniqueMovieIdList = [ ...new Set(rawMovieId) ];
dispatch(fetchMovieDetailsForWishlist(uniqueMovieIdList))
})
.catch(error=> {
console.log(error);
})
}
}
export const setMovieDetailsForWishlist = (movieDetailsList)=> {
return {
type:actionType.SET_MOVIEDETAILS_WISHLIST,
movieDetailsList:movieDetailsList
}
}
export const fetchMovieDetailsForWishlist = (movieList) => {
return dispatch => {
dispatch(fetchWishlistSuccess());
let updatedMovieList = []
movieList.map((currItem)=>{
let final_api_url = api_url+movieDetails_api_end_point+currItem+api_key+'&language='+language
axios.get(final_api_url)
.then(response=>{
updatedMovieList.push({
title:response.data.title,
movieId:response.data.id,
poster:response.data.poster_path
})
})
.catch(error=>{
console.log(JSON.stringify(error));
})
})
dispatch(setMovieDetailsForWishlist(updatedMovieList));
}
}
搅拌减速机--
愿望列表组件
import React, { Component } from 'react';
import {connect} from 'react-redux';
import {withRouter} from 'react-router-dom';
import * as action from '../store/actions/index'
export class Wishlist extends Component {
componentDidMount() {
this.props.fetchWishlist(window.localStorage.getItem('email'));
render() {
let wishListPageContent = '<div> Loading........</div>'
let userWishlistDetails = this.props.wishlist
console.log(userWishlistDetails);
if (!this.props.showLoader) {
wishListPageContent = (
<div> wishlist component</div>
)
}
return (
<div>
{wishListPageContent}
</div>
);
}
}
const mapStateToProps = state => {
return {
userEmail:state.authState.userEmail,
wishlist:state.wishlistState.wishList,
isAuthSuccess:state.authState.isAuthSuccess,
showLoader:state.wishlistState.showLoader
}
}
const mapDispatchToProps = dispatch => {
return {
fetchWishlist:(email)=>dispatch(action.fetchWishlist(email)),
fetchMovieDetailsForWishlist:(movieList)=>dispatch(action.fetchMovieDetailsForWishlist(movieList))
}
}
export default withRouter(connect(mapStateToProps,mapDispatchToProps)(Wishlist));
import React,{Component}来自'React';
从'react redux'导入{connect};
从“react router dom”导入{withRouter};
从“../store/actions/index”导入*作为操作
导出类愿望列表扩展组件{
componentDidMount(){
this.props.fetchWishlist(window.localStorage.getItem('email');
render(){
让wishListPageContent='Loading……。'
让userWishlistDetails=this.props.wishlist
console.log(userWishlistDetails);
如果(!this.props.showLoader){
wishListPageContent=(
愿望列表组件
)
}
返回(
{wishListPageContent}
);
}
}
常量mapStateToProps=state=>{
返回{
userEmail:state.authState.userEmail,
愿望列表:state.wishlistState.wishlist,
isAuthSuccess:state.authState.isAuthSuccess,
showLoader:state.wishlistState.showLoader
}
}
const mapDispatchToProps=调度=>{
返回{
fetchWishlist:(email)=>dispatch(action.fetchWishlist(email)),
fetchMovieDetailsForWishlist:(movieList)=>dispatch(action.fetchMovieDetailsForWishlist(movieList))
}
}
使用路由器导出默认值(connect(mapStateToProps,mapDispatchToProps)(Wishlist));
您是否正确地将您的组件连接到了从“react redux”导入{connect};?@reg是的,更新了wishlist组件文件的代码。在您返回reducer中的状态(在案例actionType.SET_MOVIEDETAILS_wishlist:
之前,您能否给出操作的日志。movieDetailsList
)?为了确保您实际上没有将null
推送到wishList。我认为它在fetchMovieDetailsForWishlist
方法中,final\u api\u url的值是多少?您是否没有将对象放入字符串中?(currItem)所以最终解决了问题。问题是fetchMovieDetailsForWishlist操作创建者。我在每次api调用后更新状态,但正确的方法是在所有响应可用后只更新一次状态。我使用了async/await,它工作得非常好。您是否正确地将组件与import{connect}连接从“react redux”;
?@reg是的,我更新了wishlist组件文件的代码。在返回reducer中的状态之前(在案例actionType.SET_MOVIEDETAILS_wishlist:
中),能否给出操作的日志?为了确保您实际上没有将null
推送到wishList。我认为它在fetchMovieDetailsForWishlist
方法中,final\u api\u url的值是多少?您是否没有将对象放入字符串中?(currItem)所以最终解决了这个问题。问题在于fetchMovieDetailsForWishlist操作创建者。我在每次api调用后更新状态,但正确的方法是在所有响应可用后只更新一次状态。我使用了async/Wait,它工作得非常好。
import React, { Component } from 'react';
import {connect} from 'react-redux';
import {withRouter} from 'react-router-dom';
import * as action from '../store/actions/index'
export class Wishlist extends Component {
componentDidMount() {
this.props.fetchWishlist(window.localStorage.getItem('email'));
render() {
let wishListPageContent = '<div> Loading........</div>'
let userWishlistDetails = this.props.wishlist
console.log(userWishlistDetails);
if (!this.props.showLoader) {
wishListPageContent = (
<div> wishlist component</div>
)
}
return (
<div>
{wishListPageContent}
</div>
);
}
}
const mapStateToProps = state => {
return {
userEmail:state.authState.userEmail,
wishlist:state.wishlistState.wishList,
isAuthSuccess:state.authState.isAuthSuccess,
showLoader:state.wishlistState.showLoader
}
}
const mapDispatchToProps = dispatch => {
return {
fetchWishlist:(email)=>dispatch(action.fetchWishlist(email)),
fetchMovieDetailsForWishlist:(movieList)=>dispatch(action.fetchMovieDetailsForWishlist(movieList))
}
}
export default withRouter(connect(mapStateToProps,mapDispatchToProps)(Wishlist));