我之前使用过扩展语法,但没有像这样使用过。我对 (...fns)
到 (...args)
之间的跳转感到困惑。我理解 fns
是传递进来的函数(internalOnLoad 和 onLoad),而 args
是属于相应函数的参数。但当每个函数将它们的参数传递给函数 (...args) => fns.forEach(...) 时,会是什么样子呢?
const callAll = (...fns) => (...args) => fns.forEach(fn => fn && fn(...args));
const internalOnLoad = () => console.log("loaded");
const Avatar = ({ className, style, onLoad, ...props }) => (
<img
className={`avatar ${className}`}
style={{ borderRadius: "50%", ...style }}
onLoad={callAll(internalOnLoad, onLoad)}
{...props}
/>
);
Avatar.propTypes = {
src: PropTypes.string.isRequired,
alt: PropTypes.string.isRequired,
className: PropTypes.string,
style: PropTypes.object,
onLoad: PropTypes.func
};
你能给我一个可视化的描述吗?比如像这样调用 callAll = (...fns)
:callAll(internalOnLoad, onLoad)
就相当于 callAll 会接收到这样的参数 callAll = (internalOnLoad, onLoad)
提前感谢您的帮助。
...
不是一个操作符! - Felix Kling