gpt4 book ai didi

javascript - react 重新渲染但不显示正确的组件

转载 作者:行者123 更新时间:2023-11-29 17:58:04 25 4
gpt4 key购买 nike

我有一个 Profile 组件,它应该根据用户操作(点击 a 标签)呈现不同的组件。我有正在传递的信息和正在更新的正确组件的状态。然而,当 Profile 组件被重新渲染时,它仍然渲染同一个组件,而不是新选择的组件。

class Profile extends Component {
constructor(props){
super(props);
this.state = {
currentComponent: 'sales'
}

this.changeComponent = this.changeComponent.bind(this);
}

changeComponent(component){
console.log('You are trying to change component!');
console.log(this);
this.setState({currentComponent: component});
}

render(){
let component;
switch(this.state.currentComponent){
case 'sales':
component = <Sales />;
break;
case 'income':
component = <Income />;
default:
component = <Sales />;
}
const menuItems = [
{
text: 'Sales'
},
{
text: 'Team'
},
{
text: 'Income'
},
{
text: 'Edit'
}
]
console.log(this.state);
return <div id="profileWrap">
<div id="profileMenu">
<NavMenu menuItems={menuItems} currentComponent={this.state.currentComponent} changeComponent={this.changeComponent}/>
</div>
{component}
</div>
}
}

我的 Sales/Income 组件只是

import React, {Component} from 'react';
import {Link} from 'react-router';

class Sales extends Component {
render(){
return(<h1>This is Sales!</h1>)
}
}

export default Sales;

Income 代替 Sales

如您所见,在 Profile 组件内部,当我访问该函数以及我的工作人员认为 this 在那个时刻是什么时,我正在记录(两者似乎都是正确的)而且我还在重新渲染时记录了状态,这确实显示了正在使用的正确状态。我的 switch 语句有问题吗?

编辑

将我的 switch 语句更改为 if/elseif 语句后,一切正常。为什么 switch 导致它不更新?

最佳答案

您在 switch 语句中缺少 break:

  switch(this.state.currentComponent){
case 'sales':
component = <Sales />;
break;
case 'income':
component = <Income />;
break; // <-- need this here or will fall through to default.
default:
component = <Sales />;
}

更新:您还可以通过将组件添加到 menuItems 数组来避免这一切。

 this.state = { currentComponent: <Sales /> }

...

const menuItems = [
{
text: 'Sales'
component: <Sales />
},
...
]

然后在渲染中:{ this.state.currentComponent }

关于javascript - react 重新渲染但不显示正确的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37330352/

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