javascript - 通过渲染函数更新父组件状态的问题
问题描述
父 APP.js :
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import Header from './components/header';
import Cards from './components/cards';
import Footer from './components/footer';
class App extends Component {
state = {
to_favorite: [],
};
toFav = data => {
this.setState(function(prevState, props) {
if (prevState.to_favorite !== data) {
if (prevState.to_favorite.includes(data) === false) {
return {to_favorite: data};
}
}
});
};
render() {
return (
<React.Fragment>
<Header data={this.state.to_favorite} />
<div className="cards-body">
<Cards toFav={this.toFav} />
</div>
<Footer />
</React.Fragment>
);
}
}
函数触发的子组件:
import React, {Component} from 'react';
import Card from './card';
class Cards extends Component {
state = {
books: [
{
id: '1',
title: 'HTTP: The Definitive Guide',
author: 'David Gourley',
cover: 'http',
price: '46,61',
},
{
id: '2',
title: 'JavaScript: The Definitive Guide',
author: 'David Flanagan',
cover: 'js',
price: '35,52',
},
{
id: '3',
title:
'The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference',
author: 'Charles M.Kozierok',
cover: 'tcp_ip',
price: '54,50',
},
{
id: '4',
title:
'Node.js 8 the Right Way: Practical, Server-Side JavaSCript The Scales',
author: 'Jim Wilson',
cover: 'nodejs',
price: '28,21',
},
],
favorite: [],
bag: [],
};
isaFav = data => {
if (typeof data === 'object') {
this.setState({favorite: [...this.state.favorite, data]});
} else {
this.setState({
favorite: this.state.favorite.filter(fav => fav.id != data[0]),
});
}
};
render() {
return (
<div className="cards" tofav={this.props.toFav(this.state.favorite)}>
{this.state.books.map(book => (
<Card isaFav={this.isaFav} bookInfos={book} />
))}
</div>
);
}
}
export default Cards;
我正在尝试在兄弟组件之间移动数据,而无需 redux,只需使用从子组件(卡片)带来数据的切换功能。在这一点上,一切都很酷,我可以为数据做 console.log,它显示得很好。当我尝试将状态设置为包含切换功能的父组件时,问题就出现了,该功能会触发多次。最后它向我显示了这个错误。
“react-dom.development.js:55 Uncaught Invariant Violation: 超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。React 限制嵌套更新的数量以防止无限循环。”
我尝试了 componenDidUpdate() 但它无法阻止该函数触发。
有什么解决办法吗?这是与国家合作的适当方式吗?
解决方案
推荐阅读
- python - 如何解决传递依赖冲突问题?
- reactjs - 如何在 ReactJS 中将模板文字转换为 html?
- c - 在 C 代码的后面部分丢弃 volatile 限定符
- python - 编码参数是否适用于 pandas.read_excel?
- node.js - 如何在 MongoDB 模式中使用数组类型(使用 Mongoose),使得数组由另一个表的 _id 组成
- ios - React Native iOS - 如何将配置文件添加到提交到 Appstore 的 ipa
- node.js - Discord.js 删除 X 消息
- python - 带有外部连接 SQL SERVER 的 Django 2.2
- python - Discord.py:如何修复“事件循环已关闭”
- asp.net-core - ASP Net Core 获取路由值