【发布时间】:2023-04-28 21:44:02
【问题描述】:
我有一篇表单文章,我在其中发送操作
组件/form.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
import uuidvl from 'uuid';
import { addArticle } from '../actions/index';
const mapDispatchtoProps = dispatch => {
return {
addArticle: article => dispatch(addArticle(article))
};
};
class ConnectedForm extends Component {
constructor() {
super();
this.state = {
title: ''
}
}
handleChange(eVal, nm) {
this.setState({ "title": eVal })
}
handleSubmit(ev) {
ev.preventDefault();
const { title } = this.state;
const id = uuidvl();
this.props.addArticle({ title, id });
this.setState({ title: '' });
}
render() {
const { title } = this.state;
return (
<div>
<form onSubmit={this.handleSubmit.bind(this)}>
<input type='text' value={title} id="title" onChange={(e) => this.handleChange(e.target.value, 'article')} />
<button type="submit">Add</button>
</form>
</div>
);
}
}
const Form = connect(null, mapDispatchtoProps)(ConnectedForm);
export default Form;
js/actions/index.js
import { ADD_ARTICLE } from "../constants/action-types";
export const addArticle = article => ({ type: ADD_ARTICLE, payload: article });
当我点击添加时出现以下错误
TypeError: Object(...) is not a function
这些行被突出显示
addArticle:article =>dispatch(addArticle(article))
this.props.addArticle({ title , id });
堆栈跟踪
TypeError: Object(...) is not a function
addArticle
E:/reacr-redux/src/components/Form.js:7
4 | import { addArticle } from '../actions/index';
5 | const mapDispatchtoProps= dispatch=>{
6 | return{
> 7 | addArticle:article =>dispatch(addArticle(article))
| ^ 8 | };
9 | };
10 | class ConnectedForm extends Component{
View compiled
ConnectedForm.handleSubmit
E:/reacr-redux/src/components/Form.js:24
21 | ev.preventDefault();
22 | const { title }=this.state;
23 | const id = uuidvl();
> 24 | this.props.addArticle({ title , id });
| ^ 25 | this.setState({title:''});
26 | }
27 | render(){
View compiled
▶ 18 stack frames were collapsed.
This screen is visible only in development. It will not appear if the app crashes in production.
Open your browser’s developer console to further inspect this error.
reducers/index.js
import { ADD_ARTICLE } from "../constants/action-types";
const initialState={
articles:[]
};
const rootReducer= ( state = initialState , action ) => {
switch(action.type){
case ADD_ARTICLE:
return {...state,articles:[...state.articles,action.payload]};
default :
return state;
}
};
export default rootReducer;
存储/index.js
import { createStore } from "redux";
import rootReducer from "../reducers/index";
const store=createStore(rootReducer);
export default store;
组件/list.js
import React from 'react';
import { connect } from 'react-redux';
const mapStateToProps= state =>{
return { articles :state.articles};
}
const connectedList = ({ articles }) =>(
articles.map(e=>(
<li key={e.id}>{e.title}</li>
))
);
const List= connect(mapStateToProps)(connectedList);
export default List;
Action is not a function but const是actions must always be functions才能工作吗?
谁能让我知道我哪里出错了?
【问题讨论】:
-
嗨@Tested,我试图复制你的问题,但我遇到了麻烦。您可以发布完整的错误堆栈跟踪吗?这是一个代码框的链接,我在其中运行您的代码,一切看起来都很好。 codesandbox.io/s/lrrov2v8r7
-
@DennisMartinez 我已经更新了堆栈跟踪。我也应该添加减速器和商店吗?
-
谢谢,@Tested。很有意思。我可以复制此问题的唯一方法是,如果
addArticle未在您的操作文件中定义,或者它不是实际函数(类似于export const addArticle = ADD_ARTICLE)。您是否做过任何类型的重构,您可能忘记保存或从函数更改为不同的数据类型?你在上面的代码和框中得到错误吗?添加减速器和存储不会有什么坏处。 -
@DennisMartinez 我不知道任何重构,因为我正在学习它我不知道我该怎么做它哪里出错了我将更新减速器 n 商店
-
不是函数而是 const 的问题是动作必须始终是函数才能工作?
标签: reactjs redux react-redux