Я новичок в реаги-редуксе. В моем приложении «Реактивный» у меня есть компонент Auth
, который используется экранами и импортирует компоненты Login
и SignUp
, каждый из которых представляет страницы входа и регистрации. Когда пользователь нажимает на SignUp, я хочу показать компонент SignUp
.
Компонент аутентификации:
import Login from './login'
import SignUp from './signup'
import { showSignUpView } from '../../actions/index';
class UserAuth extends React.Component {
constructor(props) {
super(props);
}
render(){
return (
<View style={styles.centerView}>
{this.props.authStep == "login" ? (
<View>
<View>
<Login navigation={this.props.navigation}/>
</View>
<View>
<Text style={{marginHorizontal: 10}}>or</Text>
</View>
<View>
<TouchableOpacity onPress={()=> this.props.showSignUpView()}>
<Text>Sign Up</Text>
</TouchableOpacity>
</View>
</View>
):(
// props.authStep == "signup"
<View>
<SignUp navigation={this.props.navigation}/>
</View>
)}
</View>
)
}
}
const mapStateToProps = state => {
return {
authStep: state.auth.authStep
}
}
export default connect(mapStateToProps, {showSignUpView})(UserAuth);
В index.js моего действия у меня есть showSignUpView
функция
// brings user to signup page
export const showSignUpView = (dispatch) => {
dispatch({type: "GO_TO_SIGNUP_PAGE"})
}
и в моих редукторах у меня есть страница для регистрации:
const initialState = {
authStep: "login"
}
export default (state = initialState, action) => {
switch(action.type) {
case "GO_TO_SIGNUP_PAGE":
return { ...state, authStep: "signup"}
default:
return state;
}
}
Это не работает и выдает ошибку:
dispatch is not a function. (In 'dispatch({
type: "GO_TO_SIGNUP_PAGE"
})', 'dispatch' is undefined)
Как правильно это сделать? Я также хочу добавить кнопку возврата на странице SignUp
, которая возвращает пользователя к основному компоненту Auth. Каков наилучший способ сделать это? Поскольку Auth является компонентом, а не экраном, я подозреваю, что props.navigation.goBack()
будет работать.