Reactjs 在react-redux中将数据从操作传递到减速器失败
我是新来的。当我阅读许多文档时,我意识到应用程序的状态应该在每个组件之外进行管理。我为我的项目选择了Redux。我试图从我的Reactjs 在react-redux中将数据从操作传递到减速器失败,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我是新来的。当我阅读许多文档时,我意识到应用程序的状态应该在每个组件之外进行管理。我为我的项目选择了Redux。我试图从我的SigIn组件传递username和password。但是当我点击login按钮时,开关中的默认语句总是被执行。 SignIn.js如下 import React from 'react'; import Header from './Head.js'; import { logIn } from '../actions/index.js'; imp
SigIn
组件传递username
和password
。但是当我点击login
按钮时,开关中的默认语句总是被执行。
SignIn.js
如下
import React from 'react';
import Header from './Head.js';
import { logIn } from '../actions/index.js';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
class SignIn extends React.Component{
constructor(){
super();
this.logInClick = this.logInClick.bind(this);
}
logInClick() {
let { dispatch } = this.props;
const data = {username:'sojimon@gmail.com', password:'12345'}
// this.props.logIn(data);
this.props.dispatch(logIn(data));
}
render(){
return(
<div>
<Header/>
<br/>
<div className="col-md-4 col-md-offset-4">
<div className="well">
<h4 className="signin_header">Sign In</h4>
<div>
<div>
<label>Email:</label>
<input type="text" className="form-control" />
</div>
<div>
<label>Password:</label>
<input type="text" className="form-control"/>
</div>
<br/>
<button className="btn btn-primary" onClick={ this.logInClick }>Login</button>
</div>
</div>
</div>
</div>
)
}
}
const matchDispatchToProps = (dispatch) => ({
// logIn: (data) => dispatch(logIn(data)),
})
SignIn.propTypes = {
logIn: React.PropTypes.func
}
export default connect (matchDispatchToProps)(SignIn);
而reducers/logIn.js是
import React from 'react';
import { LOG_IN } from '../actions/types.js'
const logIn = (state = [], action) => {
switch (action.type) {
case 'LOG_IN':
console.log('switch Case ==> LOG_IN');
return [
...state,
{
username: 'asdf',
password: '123',
}
]
// return action.logIn
default:
console.log('switch Case ==> Default');
return state
}
}
export default logIn
并在index.js文件中创建存储,如下所示:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './app/App';
import './app/index.css';
import Routes from './app/route';
import { createStore } from 'redux' // import store
import { Provider } from 'react-redux' // import provider
import myApp from './app/reducers/index.js'
let store = createStore(myApp);
ReactDOM.render(
<Provider store={store}>
<Routes />
</Provider>,
document.getElementById('root')
);
export default store;
从“React”导入React;
从“react dom”导入react dom;
从“./App/App”导入应用程序;
导入“/app/index.css”;
从“./app/route”导入路由;
从“redux”//导入存储导入{createStore}
从'react redux'导入{Provider}//导入提供程序
从“./app/reducers/index.js”导入myApp
let store=createStore(myApp);
ReactDOM.render(
,
document.getElementById('root'))
);
导出默认存储;
有两件事:1)我意识到应用程序的状态应该在每个组件之外进行管理
=>这不是真的,您可以只使用React state,这很好。2) types.js是否定义了正在运行的日志?3) 减速器中的动作类型是什么?您是否要组合还原程序来包含它?@BravoZulu 2)my type.js是,export const LOG_IN='LOG_IN';export const SIGN_UP='SIGN_UP'
3)和reducer/index.js
is,import{combineReducers}从'redux'导入登录名'。/logIn'import signUp from./signUp'const myApp=()=>combineReducers({logIn,signUp})导出默认myApp
@BravoZulu 3)操作。reducer中未定义类型
。我认为您不必执行()=>组合减速机()
。您应该执行constreducer=combineReducer({…})
并导出它reducer@BravoZuluimport{combineReducers}from'redux'import logIn from./logIn'import signUp from./signUp'const myApp=()=>combineReducers({logIn,signUp})导出默认myApp
import React from 'react';
import ReactDOM from 'react-dom';
import App from './app/App';
import './app/index.css';
import Routes from './app/route';
import { createStore } from 'redux' // import store
import { Provider } from 'react-redux' // import provider
import myApp from './app/reducers/index.js'
let store = createStore(myApp);
ReactDOM.render(
<Provider store={store}>
<Routes />
</Provider>,
document.getElementById('root')
);
export default store;