gpt4 book ai didi

reactjs - shouldComponentUpdate 并非从未被调用

转载 作者:行者123 更新时间:2023-12-03 14:31:22 28 4
gpt4 key购买 nike

请看一下我的代码。我尝试限制给定无状态组件的重新渲染,但这样做发现 shouldComponentUpdate 永远不会被调用。我已经从 styledComponents 中删除了包装器(之前有人报道过这种情况),但仍然没有被调用。除此之外,人们可以写一篇关于这个函数的捕获的文章

import React from 'react';
import GoogleSearchForm from './RenderGoogleSearchForm.js';
import ButtonWithMessage from './ButtonWithMessage.js';
import styled from 'styled-components';

export default class RenderTableOverHead extends React.Component{

constructor(props) {
super(props);
}

shouldComponentUpdate(nextProps, nextState) {
console.log('shoulItdUpdate');
return false;
}

render(){
console.log('render overhead');
const wrapstyle = 'd-flex align-items-center justify-content-center border-none'

const Button = {
// lots of defined buttons
}

return(

<div className = {wrapstyle}>
{!this.props.isHiddenReturnButton && <Button.ReturnToPreliminarySearch />}
{!this.props.isHiddenWelcomeButton && <Button.Welcome />}
{!this.props.isHiddenFailureMsg && <Button.SearchFailure />}
{!this.props.isHiddenResultsMsg && <Button.SearchResults /> }
{(this.props.isConnectionOK >0||this.props.isConnectionOK===undefined) && <Button.ConnectionError /> }
{!this.props.isHiddenInputForm && <GoogleSearchForm FetchBooks = {this.props.FetchBooks} /> }
{!this.props.isHiddenFilterToggleButton && <Button.FilterShowPrompt />}
</div>
)}}

根据要求 - 由父级调用,如下所示:

import RenderTableOverHead from './components/RenderTableOverHead.js';

下面填充了它的 props 以形成新函数

  const Overhead = ()=>{return(  

<RenderTableOverHead

isHiddenInputForm={ this.state.isHiddenInputForm}
isHiddenWelcomeButton={this.state.isHiddenWelcomeButton}
ShowGoogleSearch={this.handleWelcomeButtonClick}
//SubmitInputDataToParentState={this.fetchBooks}
FetchBooks ={this.fetchBooks}
isHiddenResultsMsg={this.state.isHiddenResultsMsg}
isHiddenFailureMsg={this.state.isHiddenFailureMsg}
toggleFilterVisibility={this.toggleFilterVisibility}
numberOfResults ={catalog.TotalNumberOfBooks}
numberOfPages =/*{_.last(TableWithPageNumbers)}*/{catalog.NumberOfPages}
currentPageNumber ={catalog.CurrentPageNumber}
//currentPage ={this.Page}//tu podmieniony numer strony jest kosztem powyższego
isConnectionOK={this.state.connectionStatus}
//errorStatus ={this.state.errorStatus}
//errorMessage ={this.state.errorMessage}
//handleError={this.handleError}
isHiddenReturnButton={this.state.isHiddenReturnButton}
isHiddenFilterToggleButton={this.state.isHiddenFilterToggleButton}
/>


);}

并像这样返回(这里名为 Overhead)

return(

<div className='container'>
<Overhead />
<Pagination />
{isDataLoaded &&
<div className = {cardStyle}>
<table className = {tableStyle}>
<thead className = {tableHeaderStyle}>
<Headline />
{Filtration}
</thead>
<TableBody />
</table>
</div>};
</div>)

最佳答案

我会尝试一下,因为我不确定问题是什么,但我发现有些事情对我来说似乎不符合习惯,并且可能会以某种方式使用react。

  • 首先,查看 official documentation关于生命周期方法:它指出即使 sCU 返回 false,在某些条件下也可能会发生重新渲染
  • “大量定义的按钮”看起来非常可疑作为性能消耗者。看起来您正在每次渲染上重建一堆组件。这很可能是静态信息,可以保存在其他地方。
  • 将实际组件包装到另一个 lambda 中,然后关闭外部状态然后用作 react 组件看起来 super 可疑。简化该代码,例如直接在正确的位置使用 RenderTableOverhead 。另外,不要将组件本身称为RenderSomething...将其更多地视为一段 UI 的声明。

我希望这会有所帮助。

关于reactjs - shouldComponentUpdate 并非从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53631597/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com