Javascript 我可以在React+;中使用道具设置初始状态吗;雷杜?
我有一个问题,我的状态显示为未定义,我怀疑这可能是因为我将初始状态作为道具传递 下面是useState语句的样子:Javascript 我可以在React+;中使用道具设置初始状态吗;雷杜?,javascript,reactjs,redux,lodash,Javascript,Reactjs,Redux,Lodash,我有一个问题,我的状态显示为未定义,我怀疑这可能是因为我将初始状态作为道具传递 下面是useState语句的样子: const [filteredData, setData] = useState(props.cardsToShow); 我将cardsToShow作为MapStateTrops中定义的状态,如下所示 cardsToShow: searchCards(state) 它是根据下面的搜索语句填充的。请注意,棒球是初始数据加载,搜索是存储中的搜索查询 const searchCard
const [filteredData, setData] = useState(props.cardsToShow);
我将cardsToShow作为MapStateTrops中定义的状态,如下所示
cardsToShow: searchCards(state)
它是根据下面的搜索语句填充的。请注意,棒球是初始数据加载,搜索是存储中的搜索查询
const searchCards = ({ baseball, search }) => {
return search
? baseball.filter(a =>
a.title[0].toLowerCase().includes(search.toLowerCase())
)
: baseball;
};
如果我使用控制台logprops.cardsToShow
我会得到作为数组对象的数据
如果我使用console logFilteredata
我会得到一个空对象
有什么想法吗?如果我理解得很好,您将面临下面所述的问题 根据这篇文章: useState不会在道具更改时初始化,因此您应该改为在useEffect上设置状态
useEffect(() => {
setData(props.cardsToShow);
}, [props]);
如果我理解得很好,您将面临以下问题 根据这篇文章: useState不会在道具更改时初始化,因此您应该改为在useEffect上设置状态
useEffect(() => {
setData(props.cardsToShow);
}, [props]);
使用Redux有几种方法,您可以使用默认参数设置减速器的初始状态
const defaultState = {
state: 0
}
function counter(state = defaultState, action) {
...
或者如果你使用选择器
const getSomeValues = store => store.someValue || 1
如果someValue
是undefined
,我们将得到1
要获得更深入的解释:
如果您使用的是lodash,它具有
get
函数,允许您在属性返回未定义时指定默认值 使用Redux有几种方法,您可以使用默认参数设置减速器的初始状态
const defaultState = {
state: 0
}
function counter(state = defaultState, action) {
...
或者如果你使用选择器
const getSomeValues = store => store.someValue || 1
如果someValue
是undefined
,我们将得到1
要获得更深入的解释:
如果您使用的是lodash,它具有
get
函数,允许您在属性返回未定义时指定默认值 你说过如果你console.log(props.cardsToShow)
你就能得到正确的数据。它是安装组件后的第一个console.log吗?或者在该日志之前,您收到未定义的?您说过,如果您console.log(props.cardsToShow)
您将获得正确的数据。它是安装组件后的第一个console.log吗?或者在你收到未定义的日志之前?我刚刚尝试了你的建议Rander,现在它实际上非常有效。你被否决的原因是什么?因为(尽管我是新来的)我认为这是个好建议。谢谢@约翰罗格森:它被否决了,因为它只是一个变通办法,不是一个深层次的修正。下次我会努力改进我的答案。谢谢你的反馈,我刚试过你的建议,Rander,现在它真的很好用。你被否决的原因是什么?因为(尽管我是新来的)我认为这是个好建议。谢谢@约翰罗格森:它被否决了,因为它只是一个变通办法,不是一个深层次的修正。下次我会努力改进我的答案。谢谢你的反馈