Я знаю, что это обычная проблема, и меня спрашивали много раз, но я прошел через все решения, но это не сработало.
Я столкнулся с этой ошибкой, когда пытаюсь войти в систему из формы входа.
Вот код, который я прилагаю.
Login.js (Просмотр)
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { ScrollView, Text, TextInput, View, Button,StyleSheet,TouchableOpacity } from 'react-native';
import {loginRequest} from './../redux/actions/auth';
import {bindActionCreators} from 'redux';
class Login extends Component {
constructor (props) {
super(props);
this.state = {
username: '',
password: ''
};
}
userLogin (e) {
this.props.actions.loginRequest(this.state.username, this.state.password);
}
render () {
return (
<ScrollView style = {{padding: 20,backgroundColor:'#ccc'}}>
<View style = {styles.container}>
<View style = {{marginLeft:15}}>
<Text>Email</Text>
</View>
<TextInput
style = {styles.input}
underlineColorAndroid = "transparent"
placeholder = "Enter username"
placeholderTextColor = "#9a73ef"
autoCapitalize = "none"
onChangeText = {(text) => this.setState({ username: text })}/>
<View style = {{marginLeft:15}}>
<Text>Password</Text>
</View>
<TextInput
style = {styles.input}
underlineColorAndroid = "transparent"
placeholder = "Enter Password > 6 letters"
placeholderTextColor = "#9a73ef"
autoCapitalize = "none"
onChangeText = {(text) => this.setState({ password: text })}/>
<TouchableOpacity
style = {styles.submitButton}
onPress = {(e) => this.userLogin(e)}>
<Text style = {styles.submitButtonText}> Submit </Text>
</TouchableOpacity>
</View>
</ScrollView>
);
}
}
const mapStateToProps = (state, ownProps) => {
return {
isLoggedIn: state.auth.isLoggedIn
};
}
function mapDispatchToProps(dispatch){
return {
actions : bindActionCreators({
loginRequest
},dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Login);
действие авторизации В этом действии я вызываю отправку без какого-либо вызова API напрямую только для тестирования, но даже если это не работает.
export function loginRequest(username,password) {
alert("TEst"); // this alert comes
return function (dispatch) {
alert(`........Tracker......`); // execution doesn't reach here ,this alert doesn't com
if (username == 'admin' && password == 'admin'){
alert(`Login Success......`);
dispatch({
type : 'LOGIN_SUCCESS',
msg : 'Logged in successfully.'
});
resolve(true);
} else {
alert(`Login Failed......`);
dispatch({
type : 'LOGIN_FAIL',
msg : 'Please make sure you have entered valid credentials.'
})
reject(false);
}
};
}
Это мой authReducer.js
export default function reducer(state = {},action){
if (action.type == 'LOGIN_SUCCESS'){
alert('login success');
return Object.assign({},state,{
isLoggedIn:true
})
} else if (action.type == 'LOGIN_FAIL'){
alert('login failed');
return Object.assign({},state,{
isLoggedIn:false
})
} else {
return state;
}
}
И точка входа
import React, { Component } from 'react';
import {
Platform,
StyleSheet,
Text,
View
} from 'react-native';
import {Provider} from 'react-redux';
import store from './redux';
import Application from './pages/Application';
export default class App extends Component{
render() {
return (
<Provider store = {store}>
<Application />
</Provider>
);
}
}
Я не нашел решения, может ли кто-нибудь помочь?





Поскольку вы возвращаете функцию из своих действий, вам необходимо использовать промежуточное программное обеспечение для обработки возвращаемых функций вместо объектов.
Я поклонник редукционный преобразователь, но существует множество других промежуточных программ redux для этой цели.
Вам нужно будет обновить свой магазин и настроить его для использования промежуточного программного обеспечения следующим образом:
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';
export default(initialState) => {
return createStore(rootReducer, initialState, applyMiddleware(thunk));
}
Я предполагаю, что в вашем файле store.js есть ошибка, поэтому он не может правильно экспортировать. Возможно, ваши редукторы не настроены так же, как у меня, поэтому замените import rootReducer from './reducers'; на те, которые у вас настроены. Вы также правильно установили redux-thunk? Либо с npm, либо с пряжей?
привет, спасибо, я только что установил redux-thunk, и у меня точно такие же редукторы настройки, потому что я экспортирую rootReducer из файла редуктора после объединения редуктора auth. (сейчас у меня только один редуктор)
Значит, он по-прежнему выдает ту же ошибку или работает после того, как вы установили redux-thunk?
после установки redux-thunk и настройки хранилища, как показано выше, я получаю ошибку, указанную в первом комментарии
var initialState = {}; let store = createStore(rootReducer,initialState,applyMiddleware(thunk)); export default store; хорошо, теперь он работает после того, как я изменил ваш код вот так.
то я получаю сообщение об ошибке: store.getState не является функцией. (В 'store getState ()', 'store.getState' не определено)