当前位置: 首页 > 知识库问答 >
问题:

ReactJS-用不同的数据对相同的组件进行再处理?

贺浩漫
2023-03-14
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'))

这个很好用。

我现在需要的是重写相同的组件,但是使用不同的数据(实际上只是使用不同的数据顺序)。

我在codepen上发布了我的原始代码,以便于调查:https://codepen.io/andriusl/pen/yxwxzg

共有1个答案

穆博简
2023-03-14

真的是重新渲染的好图案吗?

我认为不是,如果您想用不同的数据呈现相同的组件,那么通过使用状态变量来管理该组件,就不要再使用reactdom.render了。

或者使用一个状态变量来保存要对数据进行排序的键名,然后在创建ui的过程中检查并对数据进行排序,或者可以将props数据存储在状态变量中并修改该数据。

根据单据:

这种语法的问题是,每次呈现组件时都会创建不同的回调,因此最好在构造函数中绑定方法。

与此相关的问题.render():

const sortData = (name, data) => {
    return data.sort((a, b) =>  b[name] - a[name]);
};

class LeaderTable extends React.Component {
    constructor(){
        super();
        this.state = {
            sortBy: ''
        }
    }

    _renderList(){
        let data = this.props.list.slice(0);

        if(this.state.sortBy){
            data = sortData(this.state.sortBy, data);
        }

        return data.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>
            );
        });
    }

    renderByRecent() {
        this.setState({
            sortBy: 'recent'
        });
    }

    renderOriginalList(){
       this.setState({
            sortBy: ''
       });
    }

    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.renderOriginalList()} className="text-center">All time points</td>
                    </tr>
                </thead>
                <tbody>
                    {this._renderList()}
                </tbody>
            </table>
        );
    }
}
 类似资料:
  • 问题内容: 我如何获得两个数组之间的按行比较,从而得到按行的真/假数组? 给定数据: 结果步骤1: 最终结果: 那么我如何获得阵列呢 ? PS:在此示例中,数组和 进行了排序,如果在您的解决方案中数组进行了排序很重要,也请提供信息 问题答案: 这是向量化的解决方案: 请注意,将的每行与按元素进行比较。然后,我们使用+推断每个子数组是否有所有行:

  • 我想创建一个包含一些元素的数组,然后迭代(使用.foreach或.map)它。但每个数组元素必须具有不同的样式。例如,我有一个数组如下所示: 另外,我想在另一个组件中重用数组的一些单独元素。我怎么能那样做? (假设每个元素中的最后一个单词是一个单独的样式,例如background-color或color,) 你能帮帮我吗?请给我一个建议,我会怎么做?

  • 编辑:最后一个问题,如何通过值而不是引用来存储它?

  • 问题内容: 我正在练习继承。 我有两个相似的类,我想将其同化为一个数组,因此我想将Object类用作超类,因为所有内容都是Object的子类。 因此,例如,我将T类和CT类放入一个名为all的数组中,如下所示: 我跳过了声明,因为那不是我的问题。 当我希望使用循环在数组内调用函数时,我真正的问题就变成了: T和CT分别涉及的类都具有beingShot方法,该方法是公共的。 Eclipse建议将它们

  • 我正在将某些程序集打包到 msi 包中。在执行此操作时,我要求将一些程序集放入本地文件系统以及目标计算机的 GAC 中。众所周知,在这种情况下,重复文件表将无济于事。我决定将程序集放在具有不同标识符的 CAB 文件中两次。现在,为了填充组件表,我有不同的组件标识符,但我没有用于类似程序集的不同组件 GUID。我的问题是,如果我为具有不同组件标识符(在组件表中)的条目保持GUID(因为基本上程序集是

  • 我实际上是使用处理来检查从键盘输入的值并采取行动。现在的问题是,我想使用键盘上的数字“1”来根据IF语句执行两个不同的操作,但第二个条件似乎不起作用。请帮助我仔细阅读这段代码,因为我不知道我可能在哪里出错了