React redux-формирует чтение значения при изменении из другого компонента в режиме реального времени

#reactjs #redux-form

#reactjs #redux-форма

Вопрос:

Вот код https://codesandbox.io/s/7073llkj

Простой пример используйте redux-form-website-template , чтобы показать значение, я очень новичок в react и redux-form, я даже не знаю, что это такое, я просто хочу очень просто прочитать значение в других компонентах.

 import React, { Component } from "react";

class ComponentOne extends Component {
  render() {
    return (
      <div>
        <div>CompoenntOne: I wannna read the props.values.firstName here</div>
        <div>CompoenntOne: I wannna read the props.values.lastName here</div>
      </div>
    );
  }
}

export default ComponentOne;
  

Есть какой-нибудь способ или пример, чтобы очень просто показать значение в других компонентах?

Ответ №1:

Каждый раз, когда изменяется значение поля SimpleForm , обновленное значение сохраняется в хранилище Redux.

Для того, чтобы получить значения формы:

  1. Первое, что вам нужно сделать, это подключиться ComponentOne к хранилищу Redux, чтобы иметь доступ к состоянию формы.
  2. Во-вторых, вы можете запросить хранилище и получить SimpleForm значения.

Что-то вроде этого:

 import React, { Component } from 'react'
import { connect } from 'react-redux'
import { getFormValues } from 'redux-form'


class ComponentOne extends Component {
  render() {
    const { values } = this.props

    return (
      <div>
        <div>CompoenntOne: I wannna read the values.firstName here</div>
        <div>CompoenntOne: I wannna read the values.lastName here</div>
      </div>
    )
  }
}

const mapStateToProps = state => ({
  // 2. Secondly, you can query the Store and get the `SimpleForm`'s field value.
  values: getFormValues('simple')(state) || {}
})

// 1. First thing you have to do is to connect `ComponentOne` with the Redux's Store,
// in order to have access to the Form's state, because it's kept in the Store.
export default connect(mapStateToProps)(ComponentOne)
  

Комментарии:

1. Круто, теперь я могу получить полное значение объекта с помощью {JSON.stringify(values)}, но как я могу получить нужное мне значение, например, мне нужно показать values.FirstName в теге <h1>, я пробовал {values.FirstName}, но безуспешно, спасибо

2. Я не могу прочитать свойство ‘FirstName’ из undefined когда я попробовал {values.FirstName}, пожалуйста, дайте мне знать, какой шаг я делаю неправильно, спасибо

3. Я понял, что происходит. values это undefined изначально, потому что поля вашей формы нетронуты и пусты. Чтобы исправить это, вы могли бы установить значение по умолчанию равным values : values: getFormValues('simple')(state) || {} . Вот рабочий пример: codesandbox.io/s/kxk1y1mrv3

4. Спасибо!!! это действительно мне очень помогает, что, если у меня есть 100 компонентов, которым нужно прочитать значение простой формы, я должен сделать разметку в 100 раз такую же, как у ‘ComponentOne’, верно? Знаете ли вы какой-либо способ упростить это для экономии времени и кода?

5. Вы можете прочитать о HOC. Это может помочь вам в случае, если вы хотите повторно использовать определенный поток или решение. Тем не менее, я бы рекомендовал вам начать с концепций Redux, мотивации и основ . Вам бы очень помогло!