情况描述:
在react dva里面使用mock模拟数据,再通过mock接口向mock里添加数据,结果是可以成功向mock添加数据,但在添加数据完成后报错。
报错:
Warning: Failed prop type: Invalid prop
dataSource
of typeobject
supplied toTable
, expectedarray
.
报错原因:
警告:失败的属性类型:提供给“Table”的“object”类型的属性“dataSource”无效,应为“array”。
因为在组件中使用了,antd的Table,而Table中的dataSource应该为数据,这里传了对象,所以报错。
此处,data应该是从mock接口获取到的所有数据,为何会是对象形式:
原因是在effects中传参给reducers的时候不注意,传错了数据
之前的错误代码
getAllData是reducers里面的方法,负责把参数重新赋值给state里的data,而Table的dataSource获取的就是state里的data数据
显然,在错误代码中,result获取的只是新增加的数据对象,并不是全部数据的数组,所以直接把result传给getAllData,会导致state里的data变成对象,就出现了文章最开始的错误
正确做法
应该在调用添加数据的接口后,再次调用获取全部数据的接口
再把返回的全部数据的数组result作为参数传给getAllData。这样,state里的data获取到的就是所有数据的数组了
至于返回新添加的数据对象的addresult,就可以要需求使用了。