javascript - 当需要从类中回调时,将 React 常量移至其自己的文件中

标签 javascript reactjs ecmascript-6

目前我已经创建了一个包装 BootstrapTable 的组件。我必须定义一个表示数据列的常量。但是,我现在的方式似乎真的让我的渲染方法变得困惑。我想将其移至其自己的文件中,但我不确定执行此操作的最佳方法,因为它需要类中定义的回调(特别是 onUpdateClicked 方法)。

如果我的做法是一种很好的做事方式,那么知道这一点就太好了。但是,假设我确实想将其移动到另一个文件,无论如何,建议对我自己的启发将不胜感激。谢谢!

    class MyTable extends Component {

    onUpdateClicked() {
        //do stuff
    }

    render() {
        let {data} = {...this.props}

        let columns = [
            {
                dataField: 'badge',
                text: 'Badge',
                sort: true
            }, {
                dataField: 'firstName',
                text: 'First',
                sort: true
            }, {
                dataField: 'lastName',
                text: 'Last',
                sort: true
            }, {
                dataField: 'email',
                text: 'Email',
                sort: true
            }, {
                dataField: 'loggedIn',
                text: 'Logged In',
                sort: true,
                formatter: (cell, row) => {
                    if (row.loggedIn) {
                        return (<FontAwesomeIcon icon="check"/>)
                    }
                }
            }, {
                dataField: 'update',
                text: 'Update',
                formatter: () => {
                    return (<Button onClick={this.onUpdateClicked} color="primary">Update</Button>)
                }
            }, 
        ];


        return (
            <div>
                <BootstrapTable Bootstrap4 keyField='badge' data={data} columns={columns}/>
            </div>
        )
    }
}

最佳答案

您可以将列放在单独的文件中,但导出一个函数,该函数将函数作为参数用于 onClick

Columns.js

const columnsFn = someFunc => ([ // pass the function as a param.
    {
        dataField: 'badge',
        text: 'Badge',
        sort: true
    }, {
        dataField: 'firstName',
        text: 'First',
        sort: true
    }, {
        dataField: 'lastName',
        text: 'Last',
        sort: true
    }, {
        dataField: 'email',
        text: 'Email',
        sort: true
    }, {
        dataField: 'loggedIn',
        text: 'Logged In',
        sort: true,
        formatter: (cell, row) => {
            if (row.loggedIn) {
                return (<FontAwesomeIcon icon="check"/>)
            }
        }
    }, {
        dataField: 'update',
        text: 'Update',
        formatter: () => {
            return (<Button onClick={someFunc} color="primary">Update</Button>) // use it here
        }
    }, 
]); 
export default columnsFn;

YourFile.js

import columnsFn from './columns';

class MyTable extends Component {

    onUpdateClicked() {
        //do stuff
    }

    render() {
        const {data} = {...this.props}
        const myColumns = columnsFn(this.onUpdateClicked); // pass the function here

        return (
            <div>
                <BootstrapTable Bootstrap4 keyField='badge' data={data} columns={myColumns}/>
            </div>
        )
    }
}

关于javascript - 当需要从类中回调时,将 React 常量移至其自己的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299734/

相关文章:

javascript - 将 isDefaultPrevented() 与自定义事件结合使用

javascript - 内联 React JS For 循环分页

javascript - 设置从 axios 到状态的响应

javascript - 动态要求和取消要求文件

javascript - 如何处理 javascript 中动态更改深层嵌套对象的 'undefined' 错误

javascript - 为什么我无法通过大括号从 javascript 文件导入属性?

javascript - Javascript 函数中是否有可能第一个参数是可选的,第二个参数是必需的?

javascript - 如何将链接值从 "Choose"更改为 "Chosen"?

javascript - 如何在固定大小的容器中根据其下方内容的大小调整图像高度

javascript - 使用 Map 方法在其中一个条件为真时结束函数