export const getNotifications = (
role,
page,
{ see_more = undefined }
) => async dispatch => {
}
我收到了TypeError: Cannot read property 'see_more' of undefined
的错误,但是我是否已经设置了默认值undefined?为什么仍然存在错误?
答案 0 :(得分:0)
仅将其用作变量参数,而不用作对象:
export const getNotifications = (
role,
page,
see_more = undefined
) => async dispatch => {
}
答案 1 :(得分:0)
我认为您的错误TypeError: Cannot read property 'see_more' of undefined
与声明类型无关。忘记您的代码,请参见下文:
const sampleObj = {see:1, look:2};
const {watch} = sampleObj; //=> watch is 'undefined'
现在叫孩子!实际上,白人watch
是undefined
,并不是JavaScript
想要生孩子,甚至undefined
个孩子的对象:
console.log(watch.child);
//=> error: Uncaught TypeError: Cannot read property 'child' of undefined
因此,您必须注意dispatch
函数。也许您呼叫see_more
的孩子,实际上是undefined
,甚至不是通过{}
的{{1}}。
建议:将undefined
设置为{}
的默认值,这样,如果see_more将是see_more
,至少您会得到{{ 1}}来给孩子打电话。
答案 2 :(得分:0)
我敢打赌,当您这样做时,这正在发生:
blah.getNotifications('admin', 5); // and you didn't put anything for see_more
实际上,JS可以告诉您确切的内部情况,这不是错误。为了解决这个问题,我尝试了尽可能少的代码来实现这一点,这是我学到的:
export const getNotifications = (
role,
page,
{ see_more = undefined } = {}
) => async dispatch => {
}
您所需要的只是= {}
参数前面的{ see_more = undefined }
;欢迎使用高级JS。
您看到,JS试图破坏未定义的对象;是的{ see_more = undefined }
在解构之前将被单独视为参数。我发现JS正在看到:blah.getNotifications('admin', 5, undefined);
。因此该参数为undefined
,并且在尝试对其进行分解时会失败。这里的技巧是在解构步骤之前为参数本身提供默认值,以使您得到:blah.getNotifications('admin', 5, {});
,而该参数没有给出任何参数。然后进行解构,以填充您提供的默认值。
我还觉得有趣的是,当对参数完全没有定义时,默认值实际上可以包含其他默认值。尽管{}
足以满足您的默认默认设置,但是您可以通过执行以下操作来改变自己的习惯:
export const getNotifications = (
role,
page,
{ see_more = 'more text', another = 'foo', gumbo = 'mukombo' } = {another: 'bar', gumbo: 'why didnt you put anything'}
) => async dispatch => {
}
因此您将获得:
see_more === 'more text', another === 'bar', gumbo === 'why didnt you put anything'
如果您致电:
blah.getNotifications('admin', 5);
但是如果您使用至少一个属性调用,例如:
blah.getNotifications('admin', 5, {another: 'dzetse'} );
您得到:
see_more === 'more text', another === 'dzetse', gumbo === 'mukombo'
在这里完全没有任何内容(undefined
)时,您将获得其他部分默认值(两个obj都用于获取1个最终对象,然后对其进行了重构)。
只希望他们也可以接受这种简单的错误语法。