【发布时间】:2020-03-26 11:31:02
【问题描述】:
我正在渲染通过映射一个数组创建的内容,该数组返回一个单独显示项目的数组。我正在使用我商店的索引位置来确定显示的是什么卡。这很好用,但是当我实现一个 onClick 事件时,该事件从存储中获取我使用的当前索引,然后使用存储中的索引将内容推送到数组中,事情开始崩溃。它返回初始索引值而不是当前索引值。这只是与 onClick 事件隔离,因为我在实际渲染方法中使用索引值并且它的行为符合预期。我假设这种行为正在发生,因为当我在组件安装时映射列表时,它绑定了初始值的道具而不传递更新的值?这是有问题的代码
// 这是创建卡片列表的钩子
const [cardDeck, setCardDeck] = useState([])
useEffect(()=>{
renderCardArray();
},[props.news])
// 这是调用动作创建者的函数
const addToList = () =>{
props.pushItemToReadingList(props.news[props.cardIndex]);
props.increaseCardIndex();
}
// 这是设置为状态值的地图,我可以单独显示
const renderCardArray = () =>{
if(props.news.length > 1 && props.cardIndex < props.news.length){
setCardDeck(props.news.map((item,iter)=>{
return(
<div className="card" ref={drag} key={iter}>
<h3>{item.title}</h3>
<img src={item.urlToImage} alt='News' style={{maxWidth: '200px'}} />
<button onClick={props.increaseCardIndex}>X</button>
<button onClick={addToList}>{'<3'}</button>
</div>
)
}))`
// 2ed 按钮每次点击都会返回 0 的索引,但卡片会在最终返回时更新为正确的索引 // 这里是组件的最终返回值
return (
<div>
{cardDeck[props.cardIndex]}
</div>
)
}
// 最后是connect和mapStateToProps
const mapStateToProps=(state)=>{
return {news: state.news, cardIndex: state.cardIndex}
}
export default connect(mapStateToProps,{
pushItemToReadingList,
increaseCardIndex
})(NewsCard);
如果有人可以帮助我理解为什么当我执行 addToList 函数时它没有收到组件其余部分正在接收的更新索引?还有更好的方法来为映射列表提供更新的道具吗?(我暂时解决了这个问题,方法是切换我的动作创建者不接受推送的参数,它只是在内部使用存储数据,但它对我没有帮助了解为什么会发生这种行为)(我也不打算使用本地状态和 redux 存储,我在这里将两者分开只是为了测试这种渲染和动画卡片的方法,而无需为我的卡片)
【问题讨论】:
标签: javascript reactjs redux react-redux react-hooks