ReactNative - получить значения из redux-формы

Я использую ReactNative + redux + redux-form.

На моем экране login.js у меня есть следующее:

function bindAction(dispatch) {
    return {
        actions: bindActionCreators(loginActions, dispatch)
    };
}
function mapStateToProps(state) {
    return state.loginReducer
}
export default connect(mapStateToProps, bindAction)(reduxForm({
    form: "login",
    initialValues: {
        email: "[email protected]",
        password: "123123"
    }
})(LoginForm));

И моя форма:

<Field
    name = "email"
    component = {this.renderInput}
    type = "email"
    validate = {[email, required]}
/>
<Field
    name = "password"
    component = {this.renderInput}
    type = "password"
    validate = {[minLength6, maxLength15, required]}
/>

Я хочу вызвать функцию login() со значениями моих полей.

Я старался :

login() {
    if (this.props.valid) {
        this.props.actions.loginUser(selector(this.state, 'email', 'password'));
    }
}

С участием :

const selector = formValueSelector("login")

У меня нет ошибок, но в функции login() мои поля всегда пустые.

Если честно, я прочитал документ, но не уверен, как правильно использовать redux-form. Мне нужно использовать что-то еще, чтобы получить значение поля? Спасибо.

** РЕДАКТИРОВАТЬ **

Что касается некоторых примеров, сейчас я использую этот код:

<Button
    style = {styles.loginBtn}
    disabled = {this.props.loading}
    onPress = {handleSubmit(this.login)}
>
...
</Button>

И теперь я могу получить доступ к данным формы в своей функции:

login(data) {
    if (this.props.valid) {
        this.props.actions.loginUser({
            username: data.email, 
            password: data.password
        });
         ....

Я не знаю, правильный ли это способ, в react-native я не нашел ни одного примера с использованием элементов <form>, но он работает.

Вызывается ли функция входа в систему при отправке формы?

Pritish Vaidya 08.08.2018 13:45

Я обновлю свой вопрос

Vincent Decaux 08.08.2018 14:55
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
2
1 180
1

Ответы 1

В сокращенной форме вы можете либо использовать функцию handleSubmit для передачи значений вашему обработчику форма действительна, либо использовать formValueSelector, чтобы получить значения формы

handleSubmit

<Button
    style = {styles.loginBtn}
    disabled = {loading || !valid || pristine}
    onPress = {handleSubmit(this.login)}
>
...
</Button>

login(data) {
  this.props.actions.loginUser({
    username: data.email,
    password: data.password
  });
}

formValueSelector

const LoginForm = reduxForm({ // <== const Form Handler
  form: 'login', // <== Your Redux Form name
  initialValues: {
    email: "[email protected]",
    password: "123123"
  }
})(Login); // <== Bind your Class Name here

const selector = formValueSelector('login') // <== Redux Form Name

const mapStateToProps = (state) => ({
  email: selector(state, 'email'),
  password: selector(state, 'password'),
});

export default connect(mapStateToProps)(LoginForm); // <== Bind the const Form Handler

а затем получить доступ к нему в реквизитах через const {email, password} = this.props

Спасибо, вот почему я видел в документе, но как совместить это с редуктором? У меня есть редуктор (loginReducer), и я не знаю, как комбинировать в функции mapStateToProps

Vincent Decaux 08.08.2018 16:50

Если ваш loginReducer содержит поля как email и password, вы можете вернуть объединенные поля внутри mapStateToProps как const {email , password} = selector(state, 'email', 'password') и вернуть его как loginReducer: {...state.loginReducer, email, password}.

Pritish Vaidya 08.08.2018 16:59

Другие вопросы по теме