Javascript 使用数组默认值反应useState()
我试图使用React-useState来存储对象数组,但我遇到了一个奇怪的问题。国家不会接受我给它的价值。我尝试了以下所有方法:Javascript 使用数组默认值反应useState(),javascript,reactjs,Javascript,Reactjs,我试图使用React-useState来存储对象数组,但我遇到了一个奇怪的问题。国家不会接受我给它的价值。我尝试了以下所有方法: const [items,setItems] = useState(props.items) const [items,setItems] = useState([...props.items]) const clone = [...props.items] const [items,setItems] = useState(clone) 但是每个解决方案后面的
const [items,setItems] = useState(props.items)
const [items,setItems] = useState([...props.items])
const clone = [...props.items]
const [items,setItems] = useState(clone)
但是每个解决方案后面的项的值是一个空数组。即使props.items
不是空数组
例如,当我这样做时,它就起作用了
const demo = [{hello:'world'}]
const [items,setItems]=useState(demo)
有人知道这个问题吗
编辑:
具体例子:
这是调用(父)react功能元素的相关部分
const overviews = props.overviews.map((obj, index) => ({ ...obj, onClick: myOnClick}));
return <DragSort items={overviews}/>
给予
尝试确保在组件第一次渲染时检查结果。可能发生的情况是,您正在查看第二次或第n次渲染的结果,此时,状态已设置为不正确的值(在本例中为空数组)。能否提供演示?另外,通过“商店”,你是指redux吗?我怀疑你的
道具在其他地方发生了变异。你在代码中的其他地方修改了吗?@MattOestreich我的意思是一般意义上的“商店”。我没有使用redux。@AlexW我不认为我在修改它们。但如果我克隆它,它应该仍然有效。props.items
和items
的console.log
在useState(…)
之后显示props.items
是一个大小为1的数组,对于我的测试,items
是一个空数组。@Dan讲得通,只是想澄清一下。我同意Alex W的观点-听起来像是道具。当你试图使用道具时,道具是不存在的。如何将项传递到组件中?项是否来自某个API?
const Dragsort = (props) => {
const [ items, setItems ] = useState(props.items);
console.log('dragsort 1:', props.items);
console.log('dragsort 2:', items);
console.log('dragsort 3:', props.items instanceof Array);
console.log('dragsort 4:', items instanceof Array);
...