我试图实现事件处理函数,以避免每次组件渲染
和重新渲染
时创建新函数。
场景1:
如果我像下面那样在构造函数中绑定函数,并且在onChange
中没有参数,那么它只会在bundle文件中创建一个新函数一次
constructor(props){
super(props);
this.handleChange = this.handleChange.bind(this);
this.state = {
value: ""
}
}
handleChange(e){
this.setState({
value: e.target.value
});
}
render(){
const { value } = this.state;
return(
<div>
<input type="text" onChange={this.handleChange} value={value} />
</div>
)
}
场景2:
但是,当我想将一些参数
以及事件
传递给handleChange
函数时,我相信每当组件呈现
和重新呈现
constructor(props){
super(props);
this.handleChange = this.handleChange.bind(this);
this.state = {
value: ""
}
}
handleChange(e, param1, param2){
this.setState({
value: e.target.value
});
}
render(){
const { value } = this.state;
return(
<div>
<input type="text" onChange={e => this.handleChange(e, param1, param2)} value={value} />
</div>
)
}
所以
如何更好地编写场景2,使新函数在bundle文件中只创建一次,而不是每次组件渲染和重新渲染时都创建一次?可能吗?
编辑:
param1和param2是我自己的自定义值。
如果目标组件可以传递多个参数(输入
显然不能),那么第二个场景就不需要箭头函数了:
render(){
const { value } = this.state;
return(
<div>
<CustomInput type="text" onChange={this.handleChange} value={value} />
</div>
)
}
示例:
class CustomInput extends React.Component {
constructor(props) {
super(props);
this.inputHandleChange = this.inputHandleChange.bind(this);
}
inputHandleChange(e) {
this.props.onChange(e, e.target.value.length, 'param2');
}
render() {
return (
<input {...this.props} onChange={this.inputHandleChange} />
);
}
}
class InputWrapper extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.state = {
value: ""
}
}
handleChange(e, param1, param2) {
console.log(e.target.value, param1, param2);
this.setState({
value: e.target.value
});
}
render() {
const {
value
} = this.state;
return (
<div>
<CustomInput type="text" onChange={this.handleChange} value={value} />
</div>
)
}
}
ReactDOM.render(
<InputWrapper />,
demo
);
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="demo"></div>
我很难想出一个程序,用一个包含参数值的函数在屏幕上画一个球,然后让它以恒定的速度移动。你可以看出我是个笨蛋,不太懂参数。以下是我到目前为止的情况。
JavaScript 参数处理的基本原理很简单,高级的任务都需要手动操作。 本文首先关注其基本原理然后再行扩展。 1、参数处理的基本原理 JavaScript 的参数处理包括两个要点 1.1、要点:你可以传递任意数量的参数 当调用一个 function 时,你想传递多少参数都可以,这与该函数声明了多少个正式的参数无关。 缺失参数的值是 undefined,多出来的参数则直接被忽略掉。 我们用以下的
关于函数使用,与带来的问题。 函数 函数主要给数据提供处理与转换方便。 大多数SQL实现的函数 用于处理文本串(删除,充值,大小写转换) 用于在数值的数据上进行算术(返回绝对值,代数运算)操作。 用于处理日期时间值并从这些值中提取特定成份。 返回DBMS正使用的特殊信息(用户登录信息)。 文本处理函数 使用UPPER()函数来转换大小写。 mysql> SELECT vend_name, UPPE
然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在v-on指令中是不可行的。因此v-on还可以接收一个需要调用的方法名称。 示例: <div id="example-2"> <!-- `greet` 是在下面定义的方法名 --> <button v-on:click="greet">Greet</button> </div> var example2 = ne
我正在尝试使用注释处理器来验证注释,并且作为这项工作的一部分,我正在尝试弄清楚如何使用API来确定可执行文件的参数是否是参数化类型(例如List 除了解析ve.asType(). toString()给出的字符串之外,还有什么方法可以做到这一点吗?其中VariableElement ve是ExecutableElemente.getParameters()的一个元素?对这些类型有一个比简单的字符串
本文向大家介绍PHP函数超时处理方法,包括了PHP函数超时处理方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP函数超时处理方法。分享给大家供大家参考,具体如下: register_shutdown_function Registers the function named by function to be executed when script processing is c