我试图让一个简单的react-redux应用程序工作,但我遇到了一个奇怪的错误,我无法解决。我正在尝试简单地设置我当前用户的名字和处理商店,一个设置函数工作,而另一个不。
setCurrentUserFirstName-工作setCurrentUserHandle-不工作
import React, { Component } from 'react'; import { Link } from 'react-router'; import { connect } from 'react-redux'; import store from '../../store'; var Utilities = require('../../../common/commonutilities.js'); var RestClient = require('../../../common/restClient.js'); //actions import { setCurrentUserHandle, setCurrentUserFirstName } from '../../actions/userActions'; class Header extends Component { constructor(props) { super(props); this.state = {}; RestClient.api.fetchGet('/getcurrentuser', (response) => { if(response.success) { this.setState({ isAuthenticated: true, currentUser: response.currentUser }); store.dispatch({ type: 'USER_DID_LOGIN', userLoggedIn: true }); //works fine this.props.setCurrentUserFirstName(response.currentUser.firstName); //doesn't work and throws the error: "TypeError: _this.props.setCurrentUserHandle is not a function" this.props.setCurrentUserHandle(response.currentUser.handle); } }, (err) => { console.log(err); }); } render() { return ( {this.props.user.currentUserFirstName}, {this.props.user.currentUserHandle} ); } } const mapStateToProps = function(store) { return { //user properties user: store.userState }; }; const mapDispatchToProps = (dispatch) => { return{ setCurrentUserFirstName: (currentUserFirstName) =>{ dispatch( setCurrentUserFirstName(currentUserFirstName)); } } return{ setCurrentUserHandle: (currentUserHandle) =>{ dispatch( setCurrentUserHandle(currentUserHandle)); } } }; //connect it all export default connect(mapStateToProps, mapDispatchToProps)(Header);
我将它们作为操作放在useractions.js文件中
export function setCurrentUserFirstName(currentUserFirstName){ return{ type: 'SET_CURRENT_USER_FIRST_NAME', payload: currentUserFirstName }; } export function setCurrentUserHandle(currentUserHandle){ return{ type: 'SET_CURRENT_USER_HANDLE', payload: currentUserHandle }; }
在减速器中
const initialUserState = { user: {}, currentUserFirstName:[], currentUserHandle:[] }; // The User reducer const userReducer = (state = initialUserState, action) => { //using newState object to be immutable let newState = state; switch (action.type) { case 'SET_CURRENT_USER_FIRST_NAME': newState = { ...state, currentUserFirstName: action.payload }; break; case 'SET_CURRENT_USER_HANDLE': newState = { ...state, currentUserHandle: action.payload }; break; break; default: break; } return newState; }; export default userReducer;
我有什么不对的?
除了Tony的正确答案之外,我高度鼓励您改用mapdispatch
的“对象速记”形式。您可以将一个充满操作创建者的对象作为第二个参数传递给connect()
,而不是一个实际的mapdispatch
函数。在你的情况下,它看起来像:
import { setCurrentUserHandle, setCurrentUserFirstName } from '../../actions/userActions';
const actionCreators = { setCurrentUserHandle, setCurrentUserFirstName };
class Header extends Component {}
export default connect(mapStateToProps, actionCreators)(Header);
您的mapdispatchtoprops
中有两个return语句--第二个语句永远不会到达。您可以返回单个对象,如下所示:
const mapDispatchToProps = (dispatch) => {
return{
setCurrentUserFirstName: (currentUserFirstName) =>{
dispatch( setCurrentUserFirstName(currentUserFirstName));
},
setCurrentUserHandle: (currentUserHandle) =>{
dispatch( setCurrentUserHandle(currentUserHandle));
}
}
};
问题内容: 我正在尝试在React中创建一个项目,并且正在使用Firebase。在我的react-redux- firebase项目中,有一行代码出错,但我无法解决。如何解决此“ TypeError:Object(…)不是函数” 我已经搜索了此问题,但无法解决该问题。 我正在关注一个React版本为16.4.1的教程。我不确定这是否是问题 index.js文件 如果我注释掉reatReduxFir
有人能给我解释一下为什么Redux有两个函数mapStateToProps和mapDispatchToProps都将道具添加到容器中吗? 定义: MapStateTops是一个帮助组件获得更新状态(由其他组件更新)的实用程序 mapDispatchToProps是一个实用程序,它将帮助您的组件触发操作事件(调度操作可能导致应用程序状态的更改) 为什么Redux团队选择将其分为两个映射函数——也就是
问题内容: 我正在尝试创建一个简单的AJAX请求,该请求从MySQL数据库返回一些数据。这是我的以下功能: …在这里我称之为解析所需的参数: 但是,我的成功回调未运行(因为“成功!”未记录到控制台),并且在控制台中出现错误: 这是什么意思?在成功事件触发$ .ajax内部的匿名函数之前,我已经完成了AJAX请求,但是现在我试图运行一个单独的命名函数(在本例中为回调)。我该怎么办? 问题答案: 这里
我正在创建一个简单的AJAX请求,它从数据库返回一些数据。下面是我的函数: 这就是我称之为它的地方,提供了所需的参数: 但是,回调没有运行,相反,我在控制台中得到一个错误: 为什么?我以前做过AJAX请求,成功事件会触发$.AJAX中的匿名函数,但现在我尝试运行一个单独命名的函数。我该怎么办?
我用创建了一个简单的React-app,它在本地主机上运行良好。我现在正在尝试对应用程序进行Dockerify。这是我的包裹。json: 这是我的Dockerfile: 我用以下方法构建图像: 然后我运行图像作为一个容器: 这抛出: $docker run--发布3000:3000 yeet yeet@0.1.0生产/应用程序npm运行构建 yeet@0.1.0生成/应用程序响应脚本生成 /app
我在WordPress插件中有一个简单的jQuery脚本,它使用了如下jQuery包装器: 我从WordPress仪表板中调用这个脚本,并在jQuery框架加载后加载它。 当我检查Firebug中的页面时,我总是收到错误消息: TypeError:$不是函数 $(document).Ready(function(){ 我是否应该将脚本包装在这个函数中: 这个错误我已经犯了好几次了,不知道该怎么处理