如何在javascript函数中访问多个上下文(React.Component类方法)

时间:2018-01-11 09:50:21

标签: javascript reactjs handsontable

我有React组件,它呈现第3方HoC HotTableHotTable上有方法afterValidate

我将handleAfterValidate函数传递给HotTable。 问题是handleAfterValidate应该有HotTable个实例访问权限,同时可以访问HotTableWrapper个实例(请参阅下面的代码)。

默认情况下,this内的handleAfterValidate指的是HotTable个实例。 如果我将处理程序绑定到React实例,那么我将无法访问HotTable实例,但我需要它们。

在这种情况下是否可以访问这两种情境?

class HotTableWrapper extends React.Component {
processCell(row, col) {
    // do something
}

handleAfterValidate(row, prop) {
    const col = this.propToCol(prop); // 'this' should refer to HotTable instance 
    this.processCell(row, col); // 'this' should refer to HotTableWrapper class instance
}

render() {
    return (
        <div>
            <HotTable afterValidate={this.handleAfterValidate} />
        </div>
    );
}

}

2 个答案:

答案 0 :(得分:2)

您可以使用currying功能方法。如果你有lodash在船上,那么你可以这样做:

class AsyncLauncher{

    @Synchronized
    protected fun execute(block: suspend CoroutineScope.() -> Unit): Job {
        return launch(UI) { block() }
    }

}

https://lodash.com/docs/4.17.4#curry 如果你没有lodash,只需谷歌如何实施帮助currying。

答案 1 :(得分:1)

这样做的一种方法是在HotTable组件中直接定义processCell代码,并将HotTableWrapper作为范围传递给HotTable

所以在handleAfterValidate(wrapper, row, prop) { const col = this.propToCol(prop); this.props.processCell(row, col); } 你会有

HotTableWrapper

<HotTable processCell={this.processCell.bind(this)}/> 渲染方法

def user_func():
    return 42
pickle.dumps({'function': user_func})