如何在不使用 lambda 函数的情况下向 React 渲染组件中的处理程序事件发送参数?
How to sent argument to handler event in React render component not using lambda function?
我有 React 应用程序,我知道在渲染组件的 属性 中使用 lambda 函数不是一个好方法,因为它会像这样降低应用程序性能:
<ConfirmSmsModal
modal={args.modal}
smsCheck={async (code: string) => {
return await this._vm.onPressCodeConfirmSave(code);
}}
cancel={this._vm.onPressCancel}
/>
并且只放置一个事件处理程序而不是 lambda 函数是一种好方法。但是,如果我需要从 smsCheck 属性 获取参数,我该怎么做呢?
可能是这样的:
smsCheck={someFunction.bind(this, paramYouWantToSend)}
直接在 render
中声明匿名函数的唯一问题是它破坏了 memoization
因为在每个渲染上创建了一个新函数 Object.is
的浅层比较将始终断言到false
。
您的代码没有任何问题,但您始终可以将逻辑与 render
分离,方法是将其提升到处理程序
class Component extends React.Component{
async handleOperation = param =>{
const result = await apiCall(param)
}
render(){
return <Child callback={this.handleOperation} />
}
}
我有 React 应用程序,我知道在渲染组件的 属性 中使用 lambda 函数不是一个好方法,因为它会像这样降低应用程序性能:
<ConfirmSmsModal
modal={args.modal}
smsCheck={async (code: string) => {
return await this._vm.onPressCodeConfirmSave(code);
}}
cancel={this._vm.onPressCancel}
/>
并且只放置一个事件处理程序而不是 lambda 函数是一种好方法。但是,如果我需要从 smsCheck 属性 获取参数,我该怎么做呢?
可能是这样的:
smsCheck={someFunction.bind(this, paramYouWantToSend)}
直接在 render
中声明匿名函数的唯一问题是它破坏了 memoization
因为在每个渲染上创建了一个新函数 Object.is
的浅层比较将始终断言到false
。
您的代码没有任何问题,但您始终可以将逻辑与 render
分离,方法是将其提升到处理程序
class Component extends React.Component{
async handleOperation = param =>{
const result = await apiCall(param)
}
render(){
return <Child callback={this.handleOperation} />
}
}