Я полностью ожидаю, что это будет решено "смотри, ты забыл запятую там" или что-то глупое, но я действительно не вижу этого. Я разобрал проблему до базового приложения с естественной реакцией, имеющего только одну избыточную форму.
import React from 'react'
import { createStore, applyMiddleware } from 'redux'
import logger from 'redux-logger'
import { Provider } from 'react-redux'
import { Text, View, TextInput, Button } from 'react-native'
import { combineReducers } from 'redux'
import { reducer as formReducer, Field } from 'redux-form'
import { reduxForm } from 'redux-form'
const rootReducer = combineReducers({ forms: formReducer })
const store = createStore(rootReducer, {}, applyMiddleware(logger))
const validate = (values) => {
const errors = {}
if (!values.name) errors.name = 'Required'
if (!values.email) errors.email = 'Required'
return errors
}
const renderInput = ({ input: { onChange, ...restInput } }) => {
return <TextInput onChangeText={onChange} {...restInput} />
}
class MyForm extends React.Component {
submit = (values) => console.log('Submitting ', values)
render() {
const { handleSubmit } = this.props
return (
<View style={{ padding: 20 }}>
<Text>Please fill in this form:</Text>
<Field name='name' component={renderInput} />
<Field name='email' component={renderInput} />
<Button title='Go' onPress={handleSubmit(this.submit)} />
</View>
)
}
}
const MyConnectedForm = reduxForm({
form: 'myform',
validate
})(MyForm)
export default class App extends React.Component {
render() {
return (
<Provider store={store}>
<MyConnectedForm />
</Provider>
)
}
}
Я вижу, что события:
@@ перевождь-форма / ЗАМЕНА
@@ перевождь-форма / Размытие
увольняются, и что состояние формы изменится. Однако validate вызывается только один раз, при первом рендере и никогда больше. Кроме того, когда я нажимаю кнопку, функция submit вызывается с пустым объектом, а не со значениями формы, как я ожидал.
Используемые версии:
- Избыток: 3.7.2
- Редукс-форма: 7.3.0
- Реакция: 16.3.1
- Реактор: 0,55,4