我创建了一个需要在应用程序的多个部分中单独显示的组件-(在我的导航内部、主页和单独的路由上)。因此,我在此组件中的一个use中进行了所有操作调度(用于读取数据的api调用)效果:
useEffect(() => {
dispatch(time.read())
dispatch(pause.read())
dispatch(travel.read())
dispatch(distances.read())
}, [])
如您所见,此效果应该只运行一次(当组件装载时)。
在其他任何地方,我都不会在此组件内部或外部调度这些特定操作。
该组件在3个位置渲染(导航内部、其自身的时间路径和主组件内部)。我可以在导航内部同时在时间上渲染它,没有问题。它的作用应该是这样的(当我从导航中进行更改时,它们会实时镜像,因为它们都与redux绑定在一起)。最后是主页组件。
当我第一次尝试在主组件上渲染时,加载需要一段时间,然后我尝试通过v4地址(同一网络)从移动设备打开它,加载时间太长。此时,我的笔记本电脑开始听起来像直升机,所以我打开了htop,内存使用和CPU使用几乎达到了最大值,我打开了服务器日志,每秒看到数百个请求。以下是我如何在我的主组件中渲染此组件:
import React from "react"
import { useSelector } from "react-redux"
import { NavLink } from "react-router-dom"
import "./Home.css"
import {
FaCarCrash,
CgProfile,
AiOutlineShop,
TiVideo,
} from 'react-icons/all'
import Tracking from "../TimeTracking/Tracking" /*This is the component which causes all the toruble*/
export default function Home(props) {
const current = useSelector(state => state.user.currentUser)
return (
<div className="Home container">
<div id="links">
<NavLink to="/create_job/">
<FaCarCrash />
<p> CREATE JOB </p>
</NavLink>
<NavLink to={"/profile/" + current._id}>
<CgProfile />
<p> PROFILE </p>
</NavLink>
<NavLink to="/shop/view/">
<AiOutlineShop />
<p> SHOP </p>
</NavLink>
<NavLink to="/tutorials/">
<TiVideo />
<p> TRAINING </p>
</NavLink>
</div>
<Tracking /> /*This is the component which causes all the toruble*/
</div>
)
}
如您所见,没有什么不寻常的——一个简单的功能组件,甚至没有调度任何操作。这里只有与redux的通信是useSelector。
这是我渲染Home组件的地方:
import React, { Fragment } from 'react'
import { Route } from 'react-router-dom'
/*...other imports...*/
import Home from "../components/Mobile/Home"
/*...other imports...*/
export default props => (
<Fragment>
/*...other routes...*/
<Route path="/home" component={Home} />
/*...other routes...*/
</Fragment> /* just a fragment wrapper around the routes for the user. This component is later rendered inside of my <Router> </Router>. This is done because the app has a lot of different routes. */
)
出于某种原因,即使我没有与应用程序交互,该组件也会不断地重复渲染。我已经检查过,看我是否从两个地方发送过可能导致此问题的相同操作,但我没有。我知道我没有付出太多,但在这个问题上真的没有那么多,我只是希望有人以前遇到过。我以前处理过无限渲染循环,它们通常很明显,也很容易解决,但这一个有点奇怪。
我已经解决了我的问题。我实际上使用的是我的根路由器的旧版本。js其中的主组件声明如下:
<Route path="/home" component={<Home user={this.props.user} />} />
我正在渲染的Home组件也是一个旧版本(它是一个类组件,而不是我在问题中编写的函数组件)。
所以这是导致问题的原因:
user prop
在声明Home
路由时向下传递,它保存state.user
的值
然后在主页组件中,我使用MapStateTops,将用户映射到道具,并将其设置为状态。使用者当前用户。
这会导致user prop
在渲染组件时声明一次,然后在渲染组件时更改,然后在下一次渲染时再次更改,依此类推。反应没有响应渲染循环的原因是因为user
prop为每个渲染保存不同的值。
我很困惑为什么Iam会出现这个错误:太多的重新呈现。React限制呈现次数以防止无限循环。当我尝试调用USESTAT保存checkBoxList数据时,就会发生这种情况。如果我注释掉行setListOptions(checkBoxList);错误消失了。我希望发生的是,setListoptions应该保存在本地,然后我可以调用listOptions来映射我的数据。谢谢你的协助。
如何防止以下错误: 太多的重新渲染。React限制渲染的数量,以防止无限循环。' 我刚刚将一个基于类的组件更改为功能组件,但它不起作用 我的源代码 我只是将一个基于类的组件更改为功能组件,我得到了这些错误。 0个 如何防止以下错误: 太多的重新渲染。React限制渲染的数量,以防止无限循环。'
这是来自物料界面的模板。我从GitHub的注册中选择了这个模板,我只导入了useState并尝试使用它。 它抛出“太多的重新渲染。React限制渲染数量以防止无限循环材质”, 我尝试过使用反应钩子,因为我不能实现类。
当我试图设置状态,然后得到一个错误。错误:太多的重新渲染。React限制渲染的数量以防止无限循环。 我已经用
问题内容: 我有一个应用程序,需要动态设置元素的高度(让我们说“ app-content”)。它获取应用程序“ chrome”的高度,然后减去它的高度,然后将“ app- content”的高度设置为在这些限制内适合100%。这对于香草JS,jQuery或Backbone视图来说非常简单,但是我正在努力弄清楚在React中执行此操作的正确过程是什么? 以下是一个示例组件。我希望能够将的高度设置为窗
问题内容: 我在弄清楚为什么我的应用程序执行无尽渲染时遇到问题。 在内部,我的有状态组件,我正在componentDidMount方法中调用redux动作(调用componentWillMount也可以进行无尽渲染) 在CoinCard中,我实际上不做任何事情(在Flat列表内注意CoinCard) 现在,当我控制台登录我的硬币卡渲染时,我可以 在此处* 看到 Inside rende的 无限日志