gpt4 book ai didi

reactjs - 从组件分派(dispatch)时的 redux 操作 "is not a function"

转载 作者:行者123 更新时间:2023-12-03 13:21:25 26 4
gpt4 key购买 nike

我正在尝试创建一个具有 CSV 上传功能的应用程序。上传 CSV 后,它会更改状态,然后我会将 CSV 解析为 JSON 并对其进行处理。这个想法是上传文件并更新状态。一旦该状态更新,我会将 CSV 传递给 Meteor.method 以解析为 JSON。我正在使用 Meteor、React 和 Redux。我有一个处理上传的组件、一个操作和一个 reducer 。所有文件都在下面 - 我是 Meteor、React 和 Redux 的新手,我一生都无法弄清楚为什么这不起作用。我认为我没有完全理解我想要实现的目标。欢迎任何建议。

ERROR - Uncaught TypeError: fileUpload is not a function UploadCSV.jsx

// ACTIONS - fileUpload.js
export default function fileUpload(file) {
return {
type: 'FILE_UPLOAD',
file
};
}



//REDUCERS - upLoad.js
export default function upLoad(state = 'NO_FILE', action = {}) {
switch (action.type) {
case 'FILE_UPLOAD':
return action.file;
default:
return state;
}
}



//COMPONENTS - UploadCSV.jsx
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import Dropzone from 'react-dropzone';
import { RaisedButton } from 'material-ui';
import { Colors } from 'material-ui';
import fileUpload from '../actions/fileUpload.js';
import { uploadCSV } from '../actions/uploadCSV.js';

class UploadCSV extends Component {
render( dispatch, file, fileUpload ) {
const onDrop = (file) => {
console.log(file);
}
const upLoad = () => {
this.props.dispatch(fileUpload(file));
};
return (
<div>
<Dropzone accept="csv"
onDrop={ () => {
return upLoad();
}}>
<div>Click or drop files here.</div>
</Dropzone>
</div>
)
}
}

export default connect()(UploadCSV);

我不明白如果 fileUpload 是一个操作并且正在导入,为什么它“不是一个函数”?如果有人可以伸出援手,我将不胜感激。

谢谢!

最佳答案

导致此问题的一个很容易被忽视的原因如下:

如果我们使用默认导出和命名导出来定义组件类,如下所示:

// named export
export class MyComponent extends React.Component{
.......
function mapDispatchToProps(dispatch){
return bindActionCreators({reduxAction},dispatch)
}
// default export
export default connect(null,mapDispatchToProps)(MyComponent);

然后我们应该导入默认导出而不是命名导出:

这会导入默认导出并应与 redux 一起正常工作

从“./thePath”导入 MyComponent

这会导入指定的导出,并且不适用于 redux

从“./thePath”导入 {MyComponent}

原因

我们必须在渲染组件时导入默认导出,才能使用我们导出的 redux connect() 高阶函数

有时,如果您只是依赖编辑器自动导入,它会导入命名导出(没有 redux 连接),因此会给出该错误

底线

调用组件时确保导入默认导出(不带大括号)以正确使用 redux connect()

关于reactjs - 从组件分派(dispatch)时的 redux 操作 "is not a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36587780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com