我试图onChange在Component上写一个(curried?)事件处理程序,它将接收一个key参数,让它知道要更新的状态对象中的哪个键.代码不会编译,说'key' is not defined.
class App extends Component {
constructor(props) {
super(props);
this.state = {
firstName: null,
lastName: null
}
this.handleChange = this.handleChange.bind(this);
}
handleChange = (key) = (event) => {
console.log(key, event);
}
render() {
return (
<div>
<form>
<input onChange={this.handleChange('firstName')} value={this.state.firstName} />
<input onChange={this.handleChange('lastName')} value={this.state.firstName} />
</form>
{JSON.stringify(this.state, null, 4)}
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud) 一个函数被多次调用,有没有一种方法可以存储上一个函数调用的上下文/参数并与当前函数进行检查。
我正在开发自己的函数式编程库,现在引用它underscore.
memoize _.memoize(function,[hashFunction])
通过缓存计算结果来记忆给定函数.对于加速慢速运行计算很有用.如果传递了一个可选的hashFunction,它将用于根据原始函数的参数计算用于存储结果的哈希键.默认的hashFunction只使用memoized函数的第一个参数作为键.
var fibonacci = _.memoize(function(n) {
return n < 2 ? n: fibonacci(n - 1) + fibonacci(n - 2);
});
Run Code Online (Sandbox Code Playgroud)
上面的代码可以实现自动记忆而不需要处理array看起来很神奇,我看到了下面的源代码,但内部设计仍然不清楚.
// Memoize an expensive function by storing its results.
_.memoize = function(func, hasher) {
var memoize = function(key) {
var cache = memoize.cache;
var address = hasher ? hasher.apply(this, arguments) : key;
if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
return cache[key];
};
memoize.cache = {};
return memoize;
};
Run Code Online (Sandbox Code Playgroud)
有人能简单介绍一下发生了什么吗?
赞赏.
有许多用于记忆功能的 Javascript 库。
对于各种用例,有哪些最好的(高质量、灵活、快速等)?