首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mapStateToProps没有运行

mapStateToProps没有运行
EN

Stack Overflow用户
提问于 2019-10-28 11:32:10
回答 2查看 70关注 0票数 0

我是新手,我无法调试为什么mapStateToProps没有运行。请参阅login.js中的最后一个函数。

我在我的mapStateToProps函数中添加了警告语句,但它只是没有运行。不知道在哪里找问题。

store.js

代码语言:javascript
复制
import { createStore, applyMiddleware } from 'redux';
import thunkMiddleware from 'redux-thunk';
import rootReducer from '../reducers';


export const store = createStore(
    rootReducer,
    applyMiddleware(thunkMiddleware),
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);

index.js

代码语言:javascript
复制
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';

import { store } from './helpers';
import { App } from './App';
import { configureFakeAPI } from './helpers';

configureFakeAPI();

render(
    <Provider store={store}>
        <App />
    </Provider>,
    document.getElementById('app')
);

App.js

代码语言:javascript
复制
import React from 'react';
import { Router, Route } from 'react-router-dom';
import { connect } from 'react-redux';
import { PrivateRoute } from './PrivateRoute.js';
import { history } from './helpers';
import { alertActions } from './actions';
import { HomePage } from './components/HomePage';
import LoginPage  from './components/LoginPage';
import { RegisterPage } from './components/RegisterPage';

export class App extends React.Component {
    constructor(props) {
        super(props);

        const { dispatch } = this.props;
        history.listen((location, action) => {
        });
    }

    render() {
        const { alert } = this.props;
        return (
              <div className="container">
                  <div className="col-sm-8 col-sm-offset-2">
                              <LoginPage />
                  </div>
              </div>
        );
    }
}

function mapStateToProps(state) {
    const { alert } = state;
    return {
        alert
    };
}
export default connect(mapStateToProps)(App);

LoginPage.js

代码语言:javascript
复制
import React from 'react';
import {Component} from 'react';
import {Link} from 'react-router-dom';
import {connect} from 'react-redux';

import {userActions} from '../actions';
import {userConstants} from "../constants";

class LoginPage extends Component {
    constructor(props) {
        super(props);

        // reset login status

        this.state = {
            username: '',
            password: '',
            submitted: false
        };

        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange = (e) => {
        let formControlName = e.target.name;
        let value = e.target.value;
        this.setState({
            [formControlName]: value
        });
    };

    handleSubmit = (e) => {
        e.preventDefault();
        this.sendTheAlert();
    }

    render() {
        const {username, password, submitted} = this.state;
        return (
            <div className="col-md-6 col-md-offset-3">
                <i>{JSON.stringify(this.state)}</i>
                <h2>Login</h2>
                <form name="form" onSubmit={this.handleSubmit}>
                    <div className={'form-group' + (submitted && !username ? ' has-error' : '')}>
                        <label htmlFor="username">Username</label>
                        <input type="text" className="form-control username" name="username"
                               onChange={this.handleChange}/>
                        {submitted && !username &&
                        <div className="help-block">Username is required</div>
                        }
                    </div>
                    <div className={'form-group' + (submitted && !password ? ' has-error' : '')}>
                        <label htmlFor="password">Password</label>
                        <input type="password" className="form-control" name="password" onChange={this.handleChange}/>
                        {submitted && !password &&
                        <div className="help-block">Password is required</div>
                        }
                    </div>
                    <div className="form-group">
                        <button className="btn btn-primary">Login</button>
                        <a className="btn btn-link">Register</a>
                    </div>
                </form>
            </div>
        );
    }
}

function mapStateToProps(state) {
    // const { todos } = state;
    // return { todoList: todos.allIds };
    return {};

}

// function mapDispatchToProps(dispatch) {
//     alert();
//     return ({
//         sendTheAlert: () => {
//             dispatch(userConstants.LOGIN_REQUEST)
//         }
//     })
// }

const mapDispatchToProps = (dispatch) => ({ <====== NOT RUNNING
    sendTheAlert(coin) {
        debugger;
        alert();
        dispatch(userConstants.LOGIN_REQUEST) }
})

export default connect(mapStateToProps, mapDispatchToProps)(LoginPage); 
EN

回答 2

Stack Overflow用户

发布于 2019-10-28 11:51:28

我认为是mapDispatchToProps不起作用,对吗?尝尝这个

代码语言:javascript
复制
...    
const mapDispatchToProps = (dispatch) => (
    return { 
        sendTheAlert(coin) {
            debugger;
            alert();
            return dispatch(userConstants.LOGIN_REQUEST) }
    })

如何构造mapDispatchToProps的示例将是(来自https://react-redux.js.org/using-react-redux/connect-mapdispatch)。请注意返回语句

代码语言:javascript
复制
const mapDispatchToProps = dispatch => {
  return {
    // dispatching plain actions
    increment: () => dispatch({ type: 'INCREMENT' }),
    decrement: () => dispatch({ type: 'DECREMENT' }),
    reset: () => dispatch({ type: 'RESET' })
  }
}
票数 1
EN

Stack Overflow用户

发布于 2019-10-28 11:58:19

一切都很好,我只是说this.sendTheAlert()错了。应该是this.props.sendTheAlert()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58590184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档