javascript - 具有不同逻辑的类似 React 组件

标签 javascript reactjs

期望的结果

我想要一个可重用的组件,由标题和数字组成。

标题很简单,因为它只是一个字符串,我可以使用它作为 Prop 发送

<ReactDOM.render(<MyComponent title="floorp"/>, docu...);

但是对于组件的每个实例,该数字将以不同的方式计算。

问题

有没有办法干净地编写这样的组件?

我的想法

我想在组件内部,我会有一个

calculate: function () {
    switch(title) {
        case 'floorp':
            //...
        case 'not_floorp':
            //...
    }
}

我将需要至少六种不同的情况,以后可能(实际上,可能)更多,因此可扩展性是一个重要因素。

这是这样做的方法,还是我忽略了某些东西?

最佳答案

我会将计算器逻辑与组件分开,只让组件担心渲染 View 。只需使组件依赖于计算器即可扩展并可重用。

这是一个将所有计算器都放在一个文件中的示例,但您当然不必这样做,如果您愿意,每个计算器都可以位于其自己的文件中(因此这种方法为您提供了灵 active )。

calculators.js

var CALCULATORS = {
    add: function(a,b){ return a + b; },
    subtract: function(a,b){ return a - b; },
    suprise: function(){ return Math.random(); }
};

然后您只需将计算器传递给您的组件,如下所示:

<ReactDOM.render(<MyComponent title="floorp" calculator={CALCULATORS.add}/>, docu...);

在你的组件内部:

calculate: function () {
    //This will equate to '30' since we passed it the 'add' calculator above
    return this.props.calculator.call(this, 10, 20); 
}

关于javascript - 具有不同逻辑的类似 React 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38277726/

相关文章:

node.js - node_modules/@types/错误(接口(interface) 'Element' 不能同时扩展类型 'ReactElement<any>)

javascript - 将 react redux 与 next.js 结合使用

android - 使用 react-native 营造轻松的氛围?

javascript - 将 ID 添加到 Google Map Marker 然后定位它

javascript - 在 extjs GridView 中显示文本框

javascript - 在 react native 的android真实设备上运行应用程序时console.log输出在哪里

javascript - 将 React 应用程序与 jquery 插件一起使用时出现类型错误

javascript - 将数字转换为字符串并返回所有可能的排列

javascript - Sourcemap 到原始 SCSS 文件

javascript - 将来自 JavaScript 对象中不同属性的数组项组合起来