相关疑难解决方法(0)

如何避免render方法中的bind或inline箭头函数

我们应该避免在render内部绑定方法,因为在重新渲染期间它将创建新方法而不是使用旧方法,这将影响性能.

所以对于这样的场景:

<input onChange = { this._handleChange.bind(this) } ...../>
Run Code Online (Sandbox Code Playgroud)

我们可以_handleChange在构造函数中绑定方法:

this._handleChange = this._handleChange.bind(this);
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用属性初始化器语法:

_handleChange = () => {....}
Run Code Online (Sandbox Code Playgroud)

现在让我们考虑一下我们想要传递一些额外参数的情况,让我们说在一个简单的待办事项应用中,点击项目我需要从数组中删除项目,因为我需要传递每个项目索引或待办事项名称onClick方法:

todos.map(el => <div key={el} onClick={this._deleteTodo.bind(this, el)}> {el} </div>)
Run Code Online (Sandbox Code Playgroud)

现在假设todo名称是唯一的.

根据DOC:

此语法的问题是每次组件呈现时都会创建不同的回调.

题:

如何在render方法中避免这种绑定方式或者这有什么替代方法?

请提供任何参考或示例,谢谢.

javascript reactjs

21
推荐指数
2
解决办法
6869
查看次数

如何将变量传递给函数引用?

如果你有需要在渲染时运行的函数并且必须传递变量,那么在本机做出反应时,大多数人建议应该使用

onPress{() => this.functionName(variable)}
Run Code Online (Sandbox Code Playgroud)

但是,在处理大型列表和复杂组件时,您必须优化代码.为每个renderItem创建一个新函数可以flatList降低性能,有时甚至会很大,具体取决于您创建的每个renderItem的函数数量.所以建议从创建渲染函数到使用函数引用.像这样:

functionName = () => {
   //code
}

onPress={this.functionName}
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚如何使用此方法将变量传递给函数.

如果你这样做:

onPress={this.functionName(variable}
Run Code Online (Sandbox Code Playgroud)

它只会在组件负载上立即运行该功能.

有任何想法吗?

javascript function reactjs react-native

5
推荐指数
2
解决办法
1705
查看次数

标签 统计

javascript ×2

reactjs ×2

function ×1

react-native ×1