#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.
Для того, чтобы получить значения формы:
- Первое, что вам нужно сделать, это подключиться
ComponentOne
к хранилищу Redux, чтобы иметь доступ к состоянию формы. - Во-вторых, вы можете запросить хранилище и получить
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/kxk1y1mrv34. Спасибо!!! это действительно мне очень помогает, что, если у меня есть 100 компонентов, которым нужно прочитать значение простой формы, я должен сделать разметку в 100 раз такую же, как у ‘ComponentOne’, верно? Знаете ли вы какой-либо способ упростить это для экономии времени и кода?
5. Вы можете прочитать о HOC. Это может помочь вам в случае, если вы хотите повторно использовать определенный поток или решение. Тем не менее, я бы рекомендовал вам начать с концепций Redux, мотивации и основ . Вам бы очень помогло!