【发布时间】:2017-08-01 16:20:03
【问题描述】:
我有这个组件类(以及一些相关的方法):
const sortData = (name, data) => {
return data.sort((a, b) => {return b[name] - a[name]});
};
class LeaderTable extends React.Component {
renderByRecent() {
let data = sortData('recent', this.props.list);
ReactDOM.render(
<LeaderTable list={data}/>,
document.getElementById('board'))
}
render() {
return (
<table className="table table-bordered">
<thead>
<tr>
<td><strong>#</strong></td>
<td><strong>Camper Name</strong></td>
<td id="recent" onClick={() => this.renderByRecent()} className="text-center">Points in past 30 days</td>
<td id="alltime" onClick={() => this.render()} className="text-center">All time points</td>
</tr>
</thead>
<tbody>
{this.props.list.map(function(item, index) {
let url = "https://www.freecodecamp.com/" + item.username;
return (
<tr key={index}>
<td>{index}</td>
<td>
<a href={url}>
<img src={item.img} className="logo"/> {item.username}
</a>
</td>
<td className="text-center">{item.recent}</td>
<td className="text-center">{item.alltime}</td>
</tr>
);
})}
</tbody>
</table>
);
}
}
现在第一次渲染发生在页面加载时。它只是在 javascript 文件中调用,如下所示:
ReactDOM.render(
<LeaderTable list={campersData}/>,
document.getElementById('board'))
这个很好用。
我现在需要的是重新渲染相同的组件,但使用不同的数据(实际上只是使用不同的数据顺序)。
如果您查看renderByRecent 方法,在这里我通过传递以不同方式排序的相同数据来“重新渲染”(并且在td 和id='"recent" 上使用onClick 调用。但我不知道这是否确实是一个很好的重新渲染模式。
如果单击td 和id="alltime",我还想重新渲染原始数据。这部分似乎不起作用(每次我按下相应的td 时,它都会调用render 方法,但没有任何变化)。我想我无法调用render 方法并希望rerender 它?
如果你有类似这样的情况,react通常会做什么样的模式?
更新
将我的原始代码发布在 codepen 上,以便于调查:https://codepen.io/andriusl/pen/YxWXzg
【问题讨论】:
标签: javascript reactjs rendering