Просто изучая редукционную форму, и изнутри моего компонента я пытаюсь изменить имя поля по коду:
Import React from 'react'
import { connect, dispatch } from 'react-redux'
import { Field, reduxForm, formValueSelector } from 'redux-form'
let SelectingFormValuesForm = props => {
const changeStuff = (props) => {
dispatch(change('selectingFormValues', 'firstName', 'Bertje'))
}
const {
favoriteColorValue,
fullName,
handleSubmit,
hasEmailValue,
pristine,
reset,
submitting,
change
} = props
return (
<form onSubmit = {handleSubmit}>
<div>
<label>First Name</label>
<div>
<Field
name = "firstName"
component = "input"
type = "text"
placeholder = "First Name"
/>
</div>
</div>
<div>
<label>Last Name</label>
<div>
<Field
name = "lastName"
component = "input"
type = "text"
placeholder = "Last Name"
/>
</div>
</div>
<div>
<label htmlFor = "hasEmail">Has Email?</label>
<div>
<Field
name = "hasEmail"
id = "hasEmail"
component = "input"
type = "checkbox"
/>
</div>
</div>
{hasEmailValue && (
<div>
<label>Email</label>
<div>
<Field
name = "email"
component = "input"
type = "email"
placeholder = "Email"
/>
</div>
</div>
)}
<div>
<label>Favorite Color</label>
<div>
<Field name = "favoriteColor" component = "select">
<option />
<option value = "#ff0000">Red</option>
<option value = "#00ff00">Green</option>
<option value = "#0000ff">Blue</option>
</Field>
</div>
</div>
{favoriteColorValue && (
<div
style = {{
height: 80,
width: 200,
margin: '10px auto',
backgroundColor: favoriteColorValue
}}
/>
)}
<div>
<button type = "submit" disabled = {pristine || submitting}>
Submit {fullName}
</button>
<button type = "button" disabled = {pristine || submitting} onClick = {reset}>
Clear Values
</button>
<button type = "button" onClick = {changeStuff}>
Change first name
</button>
</div>
</form>
)
}
// The order of the decoration does not matter.
// Decorate with redux-form
SelectingFormValuesForm = reduxForm({
form: 'selectingFormValues',// a unique identifier for this form
change: reduxForm.change,
dispatch:reduxForm.dispatch
})(SelectingFormValuesForm)
// Decorate with connect to read form values
const selector = formValueSelector('selectingFormValues') // <-- same as form name
SelectingFormValuesForm = connect(state => {
//debugger
// can select values individually
const hasEmailValue = selector(state, 'hasEmail')
const favoriteColorValue = selector(state, 'favoriteColor')
// or together as a group
const { firstName, lastName } = selector(state, 'firstName', 'lastName')
return {
hasEmailValue,
favoriteColorValue,
fullName: `${firstName || ''} ${lastName || ''}`
}
})(SelectingFormValuesForm)
export default SelectingFormValuesForm
Когда я нажимаю эту кнопку «изменить имя», это выполняется. Я импортировал действие изменения из редукционной формы. Почему я получаю эту ошибку:
react-dom.development.js:283 Uncaught TypeError: (0 , _reactRedux.dispatch) is not a function at changeStuff (SelectingFormValuesForm.js:20) at HTMLUnknownElement.callCallback (react-dom.development.js:143) at Object.invokeGuardedCallbackDev (react-dom.development.js:193)
Как изменится значение формы в formik? Полегче?
API предоставляет функцию setFieldValue. Также стоит прочитать это и это, если у вас нет очень-очень веской причины хранить данные формы в хранилище избыточности.





Несколько способов изменить значение поля, но вот как это можно сделать с помощью change:
import { change } from 'redux-form';change к mapDispatchToProps объекту.mapDispatchToProps в connect в качестве второго аргумента (если mapStateToProps не нужен, то это будет connect(null, mapDispatchToProps).this.props.change или props.change с помощью formname, fieldname и value.PureComponent при вызове вторичных действий формы — легче читать и легче тестировать.Рабочий пример: https://codesandbox.io/s/r5zz36lqnn
Спасибо за это @Matt. Другой вопрос, как я могу получить значения формы из формы? см. stackoverflow.com/questions/55435964/…
Ваш пример великолепен, но я не могу заставить его работать: stackoverflow.com/questions/55440059/…
Потенциальным решением вашей проблемы было бы передать onClick = {changeStuff(change)}, не так ли? Кажется, что «изменение» не определено в вашей текущей функции changeStuff. Кроме того, по какой причине вы используете избыточную форму вместо formik? Я сам сделал переход неделю назад, и до сих пор это того стоило.