首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PureComponent不呈现

PureComponent不呈现
EN

Stack Overflow用户
提问于 2019-11-22 12:10:58
回答 1查看 235关注 0票数 0

嗨,我在试着看它的工作原理是纯的。

当我使用以下代码时:

App.js

代码语言:javascript
复制
import React from 'react';
import './App.css';
import Displayer from './Components/displayer';
const days=[
  'Monday',
  'Tuesday',
  'Wednesday',
  'Thursday',
  'Friday',
  'Saturday',
  'Sunday'
];

class App extends React.PureComponent{
  constructor(props){
    super(props);
    this.state={day:[]};
    this.increment=this.increment.bind(this);
    this.decrement=this.decrement.bind(this);
  }
  increment(){
    var demo=this.state.day;
    if(this.state.day.length<7)
      demo.push(days[this.state.day.length]);
    this.setState({day:demo});
  }
  decrement(){
    var demo=this.state.day;
    demo.pop();
    this.setState({day:demo});
  }
  render(){
  return (
    <div>
      <Displayer day={this.state.day} increment={this.increment} decrement={this.decrement}/>
    </div>
  );
  }
}

export default App;

Displayer.js

代码语言:javascript
复制
import React from 'react';

class Displayer extends React.PureComponent{
    render(){
    var {day,increment,decrement}=this.props;
    return(
        <div>
            <button onClick={increment}>Add Day</button>
            <button onClick={decrement}>Remove Day</button>
            {
                day.map((item,index)=>{
                    return <h1 key={index}>{item}</h1>
                })
            }
        </div>
    )
    }
}

export default Displayer;

这并没有给我想要的结果。

但是,当我只使用React.Component时,它给了我想要的结果。

有人能帮我在React.PureComponent的帮助下得到这个吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 12:19:38

您在道具中将this.state.day作为array传递。

在将以前的道具和状态与next进行比较时,浅表比较将检查原语是否具有相同的值(例如,1等于1或true等于true)。

PureComponent永远不会执行深度比较。这就是为什么它不能在你的情况下起作用。

如果您按下面的方式稍微更新您的代码,那么它将工作。

代码语言:javascript
复制
<Displayer 
   dayCount={this.state.day.length} // add it to make it work.
   day={this.state.day} increment={this.increment} decrement={this.decrement}/>

此外,还必须从React.PureComponent类中删除App,并将其设置为Component。在那之后,它会对你起作用。

您可以在这里找到更多关于PureComponent的信息。

https://reactjs.org/docs/react-api.html#reactpurecomponent

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58994044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档