Javascript Can';t检查是否定义了props中的值
所以我一直在尝试用几种方法来解决这个问题,但没有一种方法真的有效。 我将Redux与React一起使用,因此我希望使用React组件中存储的日期 问题是,数据不是第一次渲染时的数据,因此我尝试访问的变量未定义Javascript Can';t检查是否定义了props中的值,javascript,reactjs,redux,Javascript,Reactjs,Redux,所以我一直在尝试用几种方法来解决这个问题,但没有一种方法真的有效。 我将Redux与React一起使用,因此我希望使用React组件中存储的日期 问题是,数据不是第一次渲染时的数据,因此我尝试访问的变量未定义 const{errors}=this.props; 让errorList=null; 如果(错误){ errorList=Object.keys(this.props.error).map(function(key){ return{errors[key]}; }); } 我试着用我想要
const{errors}=this.props;
让errorList=null;
如果(错误){
errorList=Object.keys(this.props.error).map(function(key){
return{errors[key]} ;
});
}
我试着用我想要使用的道具值做一个常量,但这没有用,因为它也没有定义
我尝试编写一个简单的if语句来检查值是否未定义,但仍然没有成功:
if(this.props.errors&&typeof this.props.errors!=='undefined'){…}
在我的减速器中,我有一个初始状态,所以我不确定为什么它会变得未定义。也许我只是做错了初始化。。
这是我的减速机:
从“../actions/creators/types”导入{SET_ERRORS};
常量initialState={}
导出默认函数reduceError(状态=初始状态,操作){
开关(动作类型){
案例集错误:
返回动作。有效载荷;
违约:
返回状态;
}
}
我搜索了一个解决方案,其中一些建议使用componentWillReceiveProps,但这是不推荐的,如果有更好的解决方案,我不想使用它
我如何确保代码只在道具到达时运行?我在表单中使用这个函数来获取错误消息,但是我也有不同的函数,它们也不起作用。他们中的一些人会,但我在这里做着完全相同的事情,而这只是没有。我在
errorList = Object.keys(this.props.error).map(function(key) {
this.props.error应该是“errors”。这就是我如何使用Redux从存储中提取状态并在组件中使用。这可能不会解决您所有的问题,但会显示一个简明的示例
import React, {useEffect} from 'react'
import {useDispatch, useSelector} from "react-redux";
import getStuffFromDB from "../actions/getStuff"
const Example = () => {
const dispatch = useDispatch();
const stuffFromState = useSelector(state => state.stuff); // stuff is part of our state in the store
const {error, loading, stuff} = stuffFromState; // destructure state
useEffect(()=>{
dispatch(getStuffFromDB()) // get stuff from the database
}, [dispatch])
return (
<>
{/* Show loader if loading */}
{loading && <Loader />}
{/* Show error message if exists */}
{error && <Message severity="error">{error}</Message>}
<div>
<p>{stuff}</p>
</div>
</>
)
}
export default Example
行动示例:
export const getStuffFromDB = () => async dispatch => {
try {
dispatch({ type: STUFF_FROM_DATABASE_REQUEST });
const { data } = await axios.get("/api/stuff");
dispatch({ type: STUFF_FROM_DATABASE_SUCCESS, payload: data });
} catch (error) {
dispatch({
type: STUFF_FROM_DATABASE_FAIL,
payload:
error.response && error.response.data.message
? error.response.data.message
: error.message,
});
}
};
商店设置:
import { createStore, combineReducers, applyMiddleware } from "redux";
import thunk from "redux-thunk";
import { composeWithDevTools } from "redux-devtools-extension";
const reducer = combineReducers({
stuff: getStuffReducer,
});
// Set initial state
const initialState = {};
// Configure thunk middleware
const middleware = [thunk];
// Configure store
const store = createStore(
reducer,
initialState,
composeWithDevTools(applyMiddleware(...middleware))
);
export default store;
您可以在reducer中将错误初始化为空数组或对象。这样就可以定义它:)另外,您可以发布更多的代码吗?我将在明天早些时候检查它,我将在我的减速机中初始化它(如果我做得对的话)。我在问题中添加了reducer代码。我不认为这个问题是由于没有正确初始化错误造成的,因为您在组件中进行了检查。如何将状态连接到组件?
import { createStore, combineReducers, applyMiddleware } from "redux";
import thunk from "redux-thunk";
import { composeWithDevTools } from "redux-devtools-extension";
const reducer = combineReducers({
stuff: getStuffReducer,
});
// Set initial state
const initialState = {};
// Configure thunk middleware
const middleware = [thunk];
// Configure store
const store = createStore(
reducer,
initialState,
composeWithDevTools(applyMiddleware(...middleware))
);
export default store;