reactjs - TypeError: Object(...) is not a function React with Redux
问题描述
我知道有很多类似的主题,但我无法解决我的问题。
我的 mapDispatchToProps 收到此错误:
TypeError: Object(...) 不是函数
这是我的组件:component/AddQuestions.js:
import React from "react";
import QuestionList from "./QuestionList";
import PropTypes from "prop-types";
const AddQuestions2 = ({ questions, addQuestion }) => {
let newQuestion;
function handleAdd(e) {
e.preventDefault();
console.log(newQuestion);
addQuestion(newQuestion);
}
function handleChange(e) {
newQuestion = e.target.value;
}
return (
<div>
<h2>Questions</h2>
<QuestionList questions={questions} />
<form onSubmit={handleAdd}>
<label htmlFor="new-question">Enter new Question:</label>
<input id="new-question" onChange={handleChange} value={newQuestion} />
<button>Add Question #</button>
</form>
</div>
);
};
AddQuestions2.propTypes = {
questions: PropTypes.array.isRequired,
addQuestion: PropTypes.func.isRequired
};
export default AddQuestions2;
这是我的容器:容器/AddQuestions.js:
import { connect } from "react-redux";
import AddQuestion from "../components/AddQuestions";
import { addQuestion } from "../redux/actions";
const mapStateToProps = state => ({
questions: ["test1", "test2"]
});
const mapDispatchToProps = dispatch => ({
addQuestion: question => dispatch(addQuestion(question))
});
export default connect(mapStateToProps, mapDispatchToProps)(AddQuestion);
我要连接的操作:reducers/index.js:
export const addQuestion = question => ({
type: "ADD_QUESTION",
question
})
我正在使用这个版本:
"react": "^16.12.0",
"react-bootstrap": "^1.0.0-beta.16",
"react-dom": "^16.12.0",
"react-redux": "^7.2.0",
"react-scripts": "3.4.0",
"redux-thunk": "^2.3.0",
"redux": "^4.0.5",
我尝试按照 Github 上官方 redux 存储库的设置,但是是的,他们使用的是不同的 redux 版本:
https://github.com/reduxjs/redux/tree/master/examples/todos/
控制台中的错误消息:
react-dom.development.js:327 Uncaught TypeError: Object(...) is not a function
at addQuestion (AddQuestions.js:10)
at handleAdd (AddQuestions.jsx:53)
at HTMLUnknownElement.callCallback (react-dom.development.js:188)
at Object.invokeGuardedCallbackDev (react-dom.development.js:237)
at invokeGuardedCallback (react-dom.development.js:292)
at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:306)
at executeDispatch (react-dom.development.js:389)
at executeDispatchesInOrder (react-dom.development.js:414)
at executeDispatchesAndRelease (react-dom.development.js:3278)
at executeDispatchesAndReleaseTopLevel (react-dom.development.js:3287)
at forEachAccumulated (react-dom.development.js:3259)
at runEventsInBatch (react-dom.development.js:3304)
at runExtractedPluginEventsInBatch (react-dom.development.js:3514)
at handleTopLevel (react-dom.development.js:3558)
at batchedEventUpdates$1 (react-dom.development.js:21871)
at batchedEventUpdates (react-dom.development.js:795)
at dispatchEventForLegacyPluginEventSystem (react-dom.development.js:3568)
at attemptToDispatchEvent (react-dom.development.js:4267)
at dispatchEvent (react-dom.development.js:4189)
at unstable_runWithPriority (scheduler.development.js:697)
at runWithPriority$1 (react-dom.development.js:11039)
at discreteUpdates$1 (react-dom.development.js:21887)
at discreteUpdates (react-dom.development.js:806)
at dispatchDiscreteEvent (react-dom.development.js:4168)
附加信息:
创建问题.js:
import React from "react";
import AddDetails from "./AddDetails";
import AddQuestion from "../containers/AddQuestions";
import QuestionList from "./QuestionList";
class CreateQuestion extends React.Component {
render() {
return (
<div>
<AddDetails />
<AddQuestion />
</div>
);
}
}
export default CreateQuestion;
应用程序.js:
import React from "react";
import logo from "./logo.svg";
import "./App.css";
import CreateQuestion from "./components/CreateQuestion";
function App() {
return <CreateQuestion />;
}
export default App;
index.js:
import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import configureStore from "./redux/configureStore";
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
const store = configureStore();
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById("root")
);
serviceWorker.unregister();
问题列表.jsx
import React from "react";
class QuestionList extends React.Component {
render() {
return (
<ul>
{this.props.questions.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
);
}
}
export default QuestionList;
解决方案
您可以尝试使用mapDispatchToProps
如下
const mapDispatchToProps = {
addQuestion,
};
它必须自动将您的回调包装在调度中。
您也可以尝试在将addQuestion
功能传递给mapDispatchToProps
. 它是否有效?它打印什么?如果它是未定义的,那么你导入它是错误的。
import { addQuestion } from "../redux/actions";
console.log(addQuestion); // undefined?
推荐阅读
- android - 如何在 Android Spinner 中仅显示 3 个字符?
- java - @ConditionalOnExpression 与 #{systemEnvironment}
- r - R中的ggmap在世界地图中不需要的平行线
- typescript - Babel 从 TS 生成空的 JS 文件
- amazon-web-services - AWS CloudFormation 堆栈中资源之间的权限和堆栈独立性
- python - 将 NumPy 矩阵的具有不同值部分的上下三角形提取到 2 列熊猫
- javascript - Extjs 我无法分离面板和按钮项
- machine-learning - 具有不同输入和输出大小的神经网络
- android - 如何制作这种旋转动画?
- python - 如何将数据框转换为numpy?