Javascript 未触发Redux传奇/api未调用-未定义道具

Javascript 未触发Redux传奇/api未调用-未定义道具,javascript,reactjs,react-redux,redux-saga,Javascript,Reactjs,React Redux,Redux Saga,我正在学习redux传奇,在调用我的api时遇到了问题。 我的传奇似乎没有被触发,我的道具也没有定义。 我用假服务器模拟数据。 我测试了服务器,它在传奇故事之外似乎运行良好 我的代码如下所示: function mapDispatchToProps(dispatch) { return { dispatchUserRequest: () => dispatch(showUserRequest()), }; } export

我正在学习redux传奇,在调用我的api时遇到了问题。 我的传奇似乎没有被触发,我的道具也没有定义。
我用假服务器模拟数据。 我测试了服务器,它在传奇故事之外似乎运行良好

我的代码如下所示:

     function mapDispatchToProps(dispatch) {
      return {
        dispatchUserRequest: () => dispatch(showUserRequest()),
      };
    }

    export default connect(mapStateToProps, mapDispatchToProps)(User);
UserView.js

const UserView = (props)  => {
const {user} = props;
return (
            <Header as='h2'>{user.name}</Header>
 );
}

export default UserView
export function showUserRequest(){
    return{
        type: USER_REQUEST
    }
}

export function showUserSuccess(user) {
    return {
        type: USER_SUCCESS,
        payload: user
    }
}

export function showUserError(error){
    return{
        type: USER_ERROR,
        payload: error
    }
}
export default function (state = initialState, action) {
switch(action.type){
    case USER_REQUEST:
        return{
            ...state,
            requesting: true,
            successful: false,
            errors: []
        }
    case USER_SUCCESS:
        return{
            ...state,
            user: action.payload,
            requesting: false,
            successful: true,
            errors: [],
        }
    case USER_ERROR:
        return{
            requesting: false,
            successful: false,
            errors: state.errors.concat[{
                body: action.error.toString(),
                time: new Date(),
            }],
        }
        default:
            return state;
    }
}
class User extends Component {

constructor(props) {
    super(props);
    this.fetchUser = this.fetchUser.bind(this);
}

componentWillMount(){
    this.fetchUser();
}

fetchUser(){
    const { showUserRequest } = this.props;
    return showUserRequest;
}

render() {
    const user = this.props;
    return (<UserView user = {user.user}/>);
 }
}

function mapStateToProps(state) {
    return {
        user: state.user
    };
 }

export default connect(mapStateToProps, {showUserRequest})(User);
export default function* IndexSaga() {
yield all([
    SignupSaga(),
    LoginSaga(),
    UserSaga()
  ]);
}

const IndexReducer = combineReducers({
    route: routerReducer,
    form: formReducer,
    user: userReducer
})

export default IndexReducer
reducer.js

const UserView = (props)  => {
const {user} = props;
return (
            <Header as='h2'>{user.name}</Header>
 );
}

export default UserView
export function showUserRequest(){
    return{
        type: USER_REQUEST
    }
}

export function showUserSuccess(user) {
    return {
        type: USER_SUCCESS,
        payload: user
    }
}

export function showUserError(error){
    return{
        type: USER_ERROR,
        payload: error
    }
}
export default function (state = initialState, action) {
switch(action.type){
    case USER_REQUEST:
        return{
            ...state,
            requesting: true,
            successful: false,
            errors: []
        }
    case USER_SUCCESS:
        return{
            ...state,
            user: action.payload,
            requesting: false,
            successful: true,
            errors: [],
        }
    case USER_ERROR:
        return{
            requesting: false,
            successful: false,
            errors: state.errors.concat[{
                body: action.error.toString(),
                time: new Date(),
            }],
        }
        default:
            return state;
    }
}
class User extends Component {

constructor(props) {
    super(props);
    this.fetchUser = this.fetchUser.bind(this);
}

componentWillMount(){
    this.fetchUser();
}

fetchUser(){
    const { showUserRequest } = this.props;
    return showUserRequest;
}

render() {
    const user = this.props;
    return (<UserView user = {user.user}/>);
 }
}

function mapStateToProps(state) {
    return {
        user: state.user
    };
 }

export default connect(mapStateToProps, {showUserRequest})(User);
export default function* IndexSaga() {
yield all([
    SignupSaga(),
    LoginSaga(),
    UserSaga()
  ]);
}

const IndexReducer = combineReducers({
    route: routerReducer,
    form: formReducer,
    user: userReducer
})

export default IndexReducer
user.js

const UserView = (props)  => {
const {user} = props;
return (
            <Header as='h2'>{user.name}</Header>
 );
}

export default UserView
export function showUserRequest(){
    return{
        type: USER_REQUEST
    }
}

export function showUserSuccess(user) {
    return {
        type: USER_SUCCESS,
        payload: user
    }
}

export function showUserError(error){
    return{
        type: USER_ERROR,
        payload: error
    }
}
export default function (state = initialState, action) {
switch(action.type){
    case USER_REQUEST:
        return{
            ...state,
            requesting: true,
            successful: false,
            errors: []
        }
    case USER_SUCCESS:
        return{
            ...state,
            user: action.payload,
            requesting: false,
            successful: true,
            errors: [],
        }
    case USER_ERROR:
        return{
            requesting: false,
            successful: false,
            errors: state.errors.concat[{
                body: action.error.toString(),
                time: new Date(),
            }],
        }
        default:
            return state;
    }
}
class User extends Component {

constructor(props) {
    super(props);
    this.fetchUser = this.fetchUser.bind(this);
}

componentWillMount(){
    this.fetchUser();
}

fetchUser(){
    const { showUserRequest } = this.props;
    return showUserRequest;
}

render() {
    const user = this.props;
    return (<UserView user = {user.user}/>);
 }
}

function mapStateToProps(state) {
    return {
        user: state.user
    };
 }

export default connect(mapStateToProps, {showUserRequest})(User);
export default function* IndexSaga() {
yield all([
    SignupSaga(),
    LoginSaga(),
    UserSaga()
  ]);
}

const IndexReducer = combineReducers({
    route: routerReducer,
    form: formReducer,
    user: userReducer
})

export default IndexReducer
indexSaga.js/indexReducer.js

const UserView = (props)  => {
const {user} = props;
return (
            <Header as='h2'>{user.name}</Header>
 );
}

export default UserView
export function showUserRequest(){
    return{
        type: USER_REQUEST
    }
}

export function showUserSuccess(user) {
    return {
        type: USER_SUCCESS,
        payload: user
    }
}

export function showUserError(error){
    return{
        type: USER_ERROR,
        payload: error
    }
}
export default function (state = initialState, action) {
switch(action.type){
    case USER_REQUEST:
        return{
            ...state,
            requesting: true,
            successful: false,
            errors: []
        }
    case USER_SUCCESS:
        return{
            ...state,
            user: action.payload,
            requesting: false,
            successful: true,
            errors: [],
        }
    case USER_ERROR:
        return{
            requesting: false,
            successful: false,
            errors: state.errors.concat[{
                body: action.error.toString(),
                time: new Date(),
            }],
        }
        default:
            return state;
    }
}
class User extends Component {

constructor(props) {
    super(props);
    this.fetchUser = this.fetchUser.bind(this);
}

componentWillMount(){
    this.fetchUser();
}

fetchUser(){
    const { showUserRequest } = this.props;
    return showUserRequest;
}

render() {
    const user = this.props;
    return (<UserView user = {user.user}/>);
 }
}

function mapStateToProps(state) {
    return {
        user: state.user
    };
 }

export default connect(mapStateToProps, {showUserRequest})(User);
export default function* IndexSaga() {
yield all([
    SignupSaga(),
    LoginSaga(),
    UserSaga()
  ]);
}

const IndexReducer = combineReducers({
    route: routerReducer,
    form: formReducer,
    user: userReducer
})

export default IndexReducer
似乎根本没有调用userRequestFlow函数。
我肯定这只是一个愚蠢的新手错误,但我就是想不出来。

我做错了什么?

在您的user.js中,您需要定义mapDispatchToProps()并按如下方式分派showUserRequest操作:

     function mapDispatchToProps(dispatch) {
      return {
        dispatchUserRequest: () => dispatch(showUserRequest()),
      };
    }

    export default connect(mapStateToProps, mapDispatchToProps)(User);

然后在希望分派操作时调用此.props.dispatchUserRequest()。

user.js中,需要定义mapDispatchToProps()并按如下方式分派showUserRequest操作:

     function mapDispatchToProps(dispatch) {
      return {
        dispatchUserRequest: () => dispatch(showUserRequest()),
      };
    }

    export default connect(mapStateToProps, mapDispatchToProps)(User);
然后在希望分派操作时调用此.props.dispatchUserRequest()