道具类型失败:提供给“ButtonBase”的“对象”类型的无效道具“onClick”,预期为“功能”

Failed prop type: Invalid prop `onClick` of type `object` supplied to `ButtonBase`, expected `function`

<Fab raised="true" size="small" color="primary" variant="extended"
        onClick={props.Store.fetchFromServer}

this.fetchFromServer = async () => {
await console.log('test')
}

工作正常。

但是当改为关注时

<Fab raised="true" size="small" color="primary" variant="extended"
        onClick={props.Store.fetchFromServer('test')}

this.fetchFromServer = async (val) => {
await console.log(val)
}

抛出以下错误,我错过了什么?

Failed prop type: Invalid prop `onClick` of type `object` supplied to `ButtonBase`, expected `function`

这并没有多大帮助

它失败了,因为一旦你将参数传递给函数,你就会调用它,因此它现在返回一个值(因此变成一个 object)。解决这个问题的方法是像这样将一个匿名函数传递到 onClick() 事件中,基本上将它变成一个函数:

onClick={e => props.Store.fetchFromServer('test')}

这是一个测试示例,向您展示以不同方式调用的函数类型:

a = function (val) {}
b = async (val) => {
  /* await console.log(val) */
}

console.log(typeof(a))
console.log(typeof(b))
console.log(typeof(a('test1')))
console.log(typeof(b('test2')))
console.log(typeof(() => b('test3')))