有没有办法做以下的事情?
f = (o:{a:x}) {
console.log(o);
console.log(x);
}
f({a:0});
//Should Print:
//{a:0}
//0
Run Code Online (Sandbox Code Playgroud)
获得与此相同的结果.
f = function(o) {
var {a:x} = o;
console.log(o);
console.log(x);
}
f({a:0});
//Prints
//{a:0}
//0
Run Code Online (Sandbox Code Playgroud)
我想解析函数参数中的对象,同时将对象传递给函数,以便可以修改对象.
有没有办法实现方法参数解构,但也能得到方法参数.
在具有无状态组件的React应用程序的上下文中,我希望能够替换
const MyComponent = (props) => {
const {prop1, prop2} = props;
return (
<div className={prop1 + '-' + prop2}>
<Child {...props}/>
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
用更简洁的语法
const MyComponent = (props: {prop1, prop2}) (
<div className={prop1 + '-' + prop2}>
<Child {...props}/>
</div>
)
Run Code Online (Sandbox Code Playgroud)
有没有这样的语法?
在ES6中是否有办法破坏参数并通过名称引用它?
myfunction(myparam) {
const {myprop} = myparam;
...
}
Run Code Online (Sandbox Code Playgroud)
这可以在函数参数列表中的一行中完成吗?类似于Haskell的@模式匹配.
在下面的函数中,我得到了带有属性的textarea对象current.
这里,嵌套的解构与Start和End变量一起工作.但current变量不起作用.
function someFunction({ current: { selectionStart: Start, selectionEnd: End } }, AppStateSetter) {
// do something with current, Start, and End
}
Run Code Online (Sandbox Code Playgroud) 使用ES6,您可以在函数参数中构造对象:
({name, value}) => { console.log(name, value) }
Run Code Online (Sandbox Code Playgroud)
等效的ES5将是:
function(params) { console.log(params.name, params.value) }
Run Code Online (Sandbox Code Playgroud)
但是,如果我想什么了一个既参考params对象和嵌套的属性value和name?这是我得到的最接近的,但缺点是它不能用于箭头函数,因为它们无法访问该arguments对象:
function({name, value}) {
const params = arguments[0]
console.log(params, name, value)
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个函数将一个destructured对象作为箭头函数中的参数:
const myFunc = ({a, b, c}) => {
};
Run Code Online (Sandbox Code Playgroud)
无论如何还是语法允许我将整个对象作为单个值获得?由于箭头函数没有绑定arguments,我不能使用它.
是否有可能命名它,类似于:
const myFunc = (allArgs: {a, b, c}) => {
console.log(allArgs);
};
myFunc({a:1, b:2, c:3}); // Output: {a:0, b:1, c: 2}
Run Code Online (Sandbox Code Playgroud)
显然,这不是一个交易破坏者,并且有很多变通办法(要么不使用箭头功能,不要破坏,或者在需要时重新创建对象),但为了方便起见,我想知道.
在反应无状态功能组件时,我们通常会这样写:
export function MyCompoment({
title,
foo,
bar
}) {
return <div> title: {title}, ...</div>
}
Run Code Online (Sandbox Code Playgroud)
我们立即将props对象分解为它的变量。
现在,我正在使用Material-UI makeStyles挂钩,并且还在使用TypeScript,而我当前使用它的方式如下所示。
const useStyles = makeStyles((theme : Theme ) =>({
root: ({foo} : MyComponentProps) => ({
content: foo
})
});
interface MyComponentProps {
title: string;
foo: string;
bar: string;
}
export function MyCompoment({
title,
foo,
bar
} : MyComponentProps) {
const classes = useStyles({
title,
foo,
bar
});
return <div> title: {title}, ...</div>
}
Run Code Online (Sandbox Code Playgroud)
您会看到问题-我必须重复props变量名称才能传递到类中。
我认为可以避免这种情况的最好方法就是这样写:
export function MyCompoment(props: MyComponentProps) {
const { …Run Code Online (Sandbox Code Playgroud) JavaScript解构是否具有捕获对象及其内容的语法?
换句话说,如果没有以下const行,我可以在函数的arg列表中完全执行以下操作吗?
f = (a) => {
const {b} = a;
console.log("I see:", a, "and", b);
}
f({b:42})
==> I see {b: 42} and 42
Run Code Online (Sandbox Code Playgroud)
(FWIW:我在想:asClojure或ClojureScript中的东西).