当前位置: 首页 > 知识库问答 >
问题:

错误:太多的重新渲染反应[重复]

后烨煜
2023-03-14

所以这是我的第一个组件,我减速我的路线。我决定做两个导航项目。做了一些造型。但我得到的错误,许多重新渲染。因为我尝试添加带有悬停效果的样式。我不想使用css。这是我的代码:

import React, { useState } from 'react';
import { BrowserRouter, Route, Switch, Link } from 'react-router-dom';
import logo from './logo.svg';
import './App.css';
import Products from './Screens/ProductsList';
import Preview from './Screens/Product';
import ProductCreate from './Screens/ProductCreate';
import ProductEdit from './Screens/ProductEdit';
import Home from './Screens/Home';

function App() {
  const [hover, setHover] = useState(false);
  return (
    <BrowserRouter>
      <div style={style.navigationContainer}>
        <Link
          onMouseEnter={setHover(true)}
          onMouseLeave={setHover(false)}
          style={hover ? style.hoverNavItem : style.navItem}
          to="/products"
        >
          Products List
        </Link>
        <Link
          onMouseEnter={setHover(true)}
          onMouseLeave={setHover(false)}
          style={hover ? style.hoverNavItem : style.navItem}
          to="/products/create"
        >
          Create Product
        </Link>
      </div>

      <Switch>
        <Route
          key="edit-product"
          path="/products/:id/edit"
          component={ProductEdit}
        ></Route>
        <Route
          key="add-product"
          path="/products/create"
          component={ProductCreate}
        ></Route>
        <Route key="preview" path="/products/:id" component={Preview}></Route>
        <Route key="products" path="/products" component={Products}></Route>
        <Route exact path="/" component={Home}></Route>
      </Switch>
    </BrowserRouter>
  );
}

export default App;

共有2个答案

魏景龙
2023-03-14

您需要在类似以下事件的情况下触发函数:onMouseOver={()=

高海阳
2023-03-14

您需要向onMouseEnteronMouseLeave传递一个函数,该函数将在触发这些事件时调用setHover函数

改变

onMouseEnter={setHover(true)}
onMouseLeave={setHover(false)}

onMouseEnter={() => setHover(true)}
onMouseLeave={() => setHover(false)}

执行onmouseinter={setHover(true)}将立即调用setHover函数并更新状态,而不是等待onmouseinter事件。因此,您的代码陷入了更新状态和重新渲染的无限循环中

虽然,如果您只是想在悬停上的任何元素上应用一些样式,那么使用CSS比您试图做的要好得多。当组件悬停在上面时,不需要重新渲染组件,只是为了更新它的样式。

还请记住,由于当悬停为true时,您正在将样式应用于两个链接组件,因此如果您将鼠标悬停在其中一个链接组件上,它会将悬停设置为true,并且两个链接组件都将被设置样式。

 类似资料:
  • 我有一个组件,它需要获取数据,将其设置为state,然后将其传递给子级。一些数据还需要在上下文中设置。我的问题是,使用useEffect,一旦调用API,它将为我需要执行的每个setvalue()函数重新呈现。我已经尝试传递useffect一个空的[]数组,由于状态正在改变,仍然得到相同数量的重新渲染。此时数组包含集合。。。用于防止eslint抛出警告的函数。 有没有更好的方法来避免如此多的重新渲

  • 有一个案例我很困惑。 我有一个对象redux状态:{show:true,creative:{name:'a',tags:[t1,t2,t3]}。此对象已通过“react redux”的“connect”功能映射到道具。 当我改变属性“显示”或“creative.name”时,它确实会触发重新渲染。但是如果我将t0追加到"creative.tags",它就不会运行re-渲染。 我必须分配一个新变量来

  • 考虑规范的示例: 单击按钮使每个状态打印两次。为什么呢?

  • 如何防止以下错误: 太多的重新渲染。React限制渲染的数量,以防止无限循环。' 我刚刚将一个基于类的组件更改为功能组件,但它不起作用 我的源代码 我只是将一个基于类的组件更改为功能组件,我得到了这些错误。 0个 如何防止以下错误: 太多的重新渲染。React限制渲染的数量,以防止无限循环。'

  • 我对react还比较陌生,我一直在分解一个web应用程序,并用react组件替换部分。我现在正在开发一个组件,其中包含我创建的几个不同组件。 在新组件中,我在componentDidMount函数中进行API调用,并创建子组件。乍一看,一切看起来都很完美,但当我们在其中一个子组件中进行状态更改,然后在父组件中进行更改时,子组件将其状态重置为更改之前的状态。 我知道发生了什么,州政府没有被传递给家长

  • 我正在编写文本输入,并在事件中调用,因此React重新呈现我的UI。问题是文本输入总是失去焦点,所以我需要为每个字母重新聚焦:D。