上述代码还是不能解决实时变化问题,要实现在中标信息列表中点击进入详情页返回后被点击的项目变灰色,优化代码
时间: 2024-03-11 15:49:39 浏览: 58
要实现这个功能,可以在点击进入详情页时将被点击的项目的状态标记为已点击,然后在返回到列表页时根据这个标记来动态改变该项目的颜色。
具体实现可以参考以下步骤:
1. 在每个中标信息项目的数据中添加一个状态字段,用来保存该项目的状态,比如是否已经被点击。
2. 在点击进入详情页时,将被点击的项目的状态标记为已点击,可以通过修改该项目的状态字段来实现。
3. 在返回到列表页时,遍历所有项目的状态字段,如果发现某个项目的状态为已点击,则将该项目的样式改为灰色。
4. 为了实现实时变化,可以在进入详情页和返回列表页时都触发一次重新渲染列表的操作,这样所有项目的样式都会被重新计算。
代码示例:
```
// 中标信息列表项目的数据结构
const data = [
{ id: 1, name: '项目1', status: 'normal' },
{ id: 2, name: '项目2', status: 'normal' },
{ id: 3, name: '项目3', status: 'normal' },
// ...
];
// 中标信息列表的组件
class BidList extends React.Component {
constructor(props) {
super(props);
this.state = {
data: data,
};
}
handleClick(id) {
// 将被点击的项目的状态标记为已点击
const newData = this.state.data.map(item => {
if (item.id === id) {
return { ...item, status: 'clicked' };
} else {
return item;
}
});
this.setState({ data: newData });
// 跳转到详情页
// ...
}
render() {
return (
<div>
{this.state.data.map(item => (
<div key={item.id} className={item.status} onClick={() => this.handleClick(item.id)}>
{item.name}
</div>
))}
</div>
);
}
}
// 详情页的组件
class DetailPage extends React.Component {
constructor(props) {
super(props);
this.state = {
id: this.props.match.params.id,
};
}
handleGoBack() {
// 返回到列表页
// ...
}
render() {
return (
<div>
<div>{this.state.id}</div>
<button onClick={() => this.handleGoBack()}>返回</button>
</div>
);
}
}
// 路由配置
const App = () => (
<Router>
<div>
<Route exact path="/" component={BidList} />
<Route path="/detail/:id" component={DetailPage} />
</div>
</Router>
);
// 在返回列表页时重新渲染列表
class DetailPage extends React.Component {
// ...
handleGoBack() {
// 返回到列表页
// ...
// 触发重新渲染列表
this.setState({});
}
// ...
}
```
在上面的代码中,我们在项目的数据结构中添加了一个状态字段 `status`,用来保存项目的状态。当项目被点击时,我们将其状态标记为 `clicked`,然后在列表页的渲染中根据状态来设置样式。在详情页返回列表页时,我们重新渲染了列表,这样所有项目的样式都会被重新计算。
阅读全文
相关推荐













