Обновить значение поля на основе некоторого выбора на другом экране

Проблема:

Я пытаюсь обновить значение поля избыточной формы на основе некоторого выбора на другом экране, где находится поле.

Что я делаю:

1) Показать форму с TouchableOpacity. Ему придан стиль раскрывающегося списка (это registeredField)

2) Нажмите на эту кнопку, и вы будете перенаправлены в список

3) Нажмите на один элемент из списка

4) Вы перенаправлены обратно

5) Заполнитель должен измениться на выбор, сделанный на предыдущем экране.


Что происходит:

Если я нажму на раскрывающийся список (кнопка сенсорной непрозрачности) напрямую и вернусь, значение не обновится. Но как только я меняю ввод для любого из других полей - метка сразу меняется. То же самое также работает, если у меня есть что-то в одном из других входов, а затем я делаю выбор - метка меняется, как и ожидалось.

Моя попытка:

Чтобы показать метку, я подготавливаю объект initialValues и передаю его компоненту, который отображает форму, чтобы правильно отображать метку:

Компонент поля:

....
<TouchableOpacity onPress={openPicker}>
  <Text>{groupName || 'Select Group'}</Text>
</TouchableOpacity>
....

Поле формы в reduxForm связанном компоненте:

<Field
    name="groupName"
    placeholder="Group"
    groupPicker // to render the picker or a normal input box
    groupName={groupName} // the value used as placeholder
    openGroupPicker={openGroupPicker}
    component={FormInput}
 />
 ....
 const connectedDriverForm = reduxForm({
    form: 'driverForm',
    validate,
    enableReinitialize: true,
 })(DriverForm);

Форма внутри контейнера, куда передается реквизит initialvalues:

const {
  subhaulerPhone,
  subhaulerEmail,
  groupName,
} = this.props;
const initialValues = {
  subhaulerPhone,
  subhaulerEmail,
  groupName,
};
// within render()
<DriverForm
    initialValues={initialValues}
    openGroupPicker={this.handleOpenGroupPicker}
    onDriverFormSubmit={this.handleDriverFormSubmit}
    onCancel={this.closeDriverForm}
/>

Я попытался подключиться к событию change избыточной формы:

export default connect(
  mapStateToProps,
  {
    ...mapDispatchToProps,
    saveGroupName: groupName => change('driverForm', 'groupName', groupName),
  },
)(UserManagementForm);

Я использовал реквизит initialValues, чтобы средство выбора отображало правильную метку при выборе, а также правильно загружало и сохраняло форму при каждом изменении экрана.

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

import { pathOr } from 'ramda';
import { createStructuredSelector } from 'reselect';
import {
  initialState,
  SAVE_FORM_VALUES,
  SET_GROUP_NAME,
  CLEAR_GROUP_NAME,
  CLEAR_FORM_VALUES,
} from './usermanagementform.constants';

export const userManagementFormSelector = createStructuredSelector({
  subhaulerPhone: pathOr('', ['userManagementForm', 'subhaulerPhone']),
  subhaulerEmail: pathOr('', ['userManagementForm', 'subhaulerEmail']),
  groupName: pathOr('', ['userManagementForm', 'groupName']),
  subhaulerFormValues: pathOr({}, ['form', 'driverForm', 'values']),
});

export const userManagementFormReducer = (state = initialState, action) => {
  switch (action.type) {
    case SAVE_FORM_VALUES:
      return {
        ...state,
        ...action.data,
      };
    case CLEAR_FORM_VALUES:
      return {
        subhaulerPhone: '',
        subhaulerEmail: '',
        groupName: '',
      };
    case SET_GROUP_NAME:
      return {
        ...state,
        groupName: action.groupName,
      };
    case CLEAR_GROUP_NAME:
      return {
        ...state,
        groupName: '',
      };
    default:
      return state;
  }
};

Все мои попытки пока тщетны. Это крайний случай, и я не могу понять, почему это не работает или что не работает.

Любая помощь будет оценена.

Спасибо.

Используемый ресурс:


person Abhishek Ghosh    schedule 09.11.2017    source источник