当前位置: 首页 > 知识库问答 >
问题:

调用映射操作时出现类型错误-将操作映射到props react/redux

马凡
2023-03-14

我试图映射到道具的行动,但我得到一个错误:类型错误:_this2.props.updateUsername不是一个函数

如何成功地将redux操作映射到props并成功调用函数?我在任何其他stackoverflow问题/答案中都没有看到这个错误弹出,这是一个简单的错误吗?会不会是在. index或. app中对redux的设置错误?

我试过:-不使用默认导出导入-有不同格式的mapDispatchToProps(如不使用bindactioncreators) -修复打字错误

>

  • 组件:

    import { updateUsername } from "../../actions/user-actions";
    import React, { Component } from "react";
    import { InputText } from "primereact/inputtext";
    import { Button } from "primereact/button";
    import { Password } from "primereact/password";
    import "./UserLogin.css";
    import { connect } from "react-redux";
    import { bindActionCreators } from 'redux'
    
    export class UserLoginPage extends Component {
      constructor(props) {
        super(props);
        this.state = { //used to be using states so ill leave these here for now
          username: "", 
          password: "",
          renderTryAgain: false
        };
    
        this.checkLoginDetails.bind(this.checkLoginDetails);
      }
    
      async checkLoginDetails() {
        ...
      }
    
      render() {
        const usernameBox = (
          <InputText
            ...
            value={this.props.username}
            onChange={e => this.props.updateUsername(e.target.value)}
          />
        );
    
        const passwordBox = (
          <Password
            ...
          />
        );
    
        const loginButton = (
          <Button
            ...
          />
        );
    
        return (
          <header className="User-login">
            <p>Dashboard User Login</p>
            <div className="p-grid">
              <div className="p-col">{usernameBox}</div>
              <div className="p-col">{passwordBox}</div>
              <div className="p-col">{loginButton}</div>
            </div>
          </header>
        );
      }
    }
    
    const mapStateToProps = state => ({
      username: state.username
    });
    
    const mapDispatchToProps = dispatch => bindActionCreators(
      {
        updateUsername,
      },
      dispatch,
    )
    
    export default connect(
      mapStateToProps,
      mapDispatchToProps
    )(UserLoginPage);
    

    减速器:

    import { UPDATE_USERNAME} from '../actions/user-actions'
    
    export function passReducer(state = "", {type, payload}) {
      switch (type) {
        case true:
          return payload
        default:
          return state
      }
    }
    
    export function usernameReducer(state = '', {type, payload}) {
      switch (type) {
        case UPDATE_USERNAME:
          return payload.username
        default:
          return state
      }
    }
    
    export default { passReducer, usernameReducer };
    

    >

  • 行动:

    export const UPDATE_USERNAME = 'username:updateUsername'
    export function updateUsername(newUsername){
        return {
            type: UPDATE_USERNAME,
            payload: {
                username: newUsername
            }
        }
    }
    
    export default {UPDATE_USERNAME, updateUsername}
    

    非常感谢。

  • 共有2个答案

    印季
    2023-03-14

    不要使用mapDispatchToProps。相反,只需将所有想要映射的动作包装在一个对象中,并将它们作为第二个参数传递给connect helper方法。

    像这样< code>connect(mapStateToProps,{ update username })(user log in page)

    希望这有帮助!

    夏骞尧
    2023-03-14

    你可以在更新你的构造函数后检查一次吗,如下所示?

    constructor(props) {
        super(props);
        //...
      }
    
     类似资料:
    • 我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。

    • 我有两个需要映射的继承层次结构。一个层次结构是国内的,另一个是野生的。我有抽象的Domestic动物和具体的DomesticCat和DomesticDog扩展它。在第二个层次结构中,我有抽象的Wild动物和具体的WildCat和WildDog扩展它。我还有另外两个类,分别是WildAnimalFeeder具有Wild动物的成员对象和DomesticAnimalFeeder具有DomesticAni

    • 我有一个JSP登录页面,可以调用login action类。我使用的是Struts注释,而不是到映射,一切正常。我随机尝试了一些新东西,所以我从action类和struts中删除了所有注释。xml还没有映射到我的

    • flatMap 遍历所有的元素,为每一个创建一个集合,最后把所有的集合放在一个集合中。 assertEquals(listOf(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7), list.flatMap { listOf(it, it + 1) }) groupBy 返回一个根据给定函数分组后的map。 assertEquals(mapOf("odd" to listOf(

    • 我正在尝试使用流将一个列表映射到另一个列表。 原始列表的某些元素无法映射。也就是说,映射函数可能无法找到合适的新值。 null 对更好的方法的建议?或者我应该把溪流全部挖开,用好的旧循环?

    • 1)做这件事的正确方法是什么?我做错了什么? 2)流是线程安全的吗?我正在多线程环境中工作,所以我是否应该使用返回TRAAD安全集合的收集器?