Проверка уровня поля формы Redux не имеет последней опоры из содержащего компонента - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть форма Redux Field с указанной функцией проверки.В этой функции проверки я хочу сослаться на реквизиты из React Component.Примерно так:

interface Props {
  // this is passed from the parent component which is linked to the state.payout.balance in redux store
  balance: number
}

class ScreenView extends React.PureComponent<
  InjectedFormProps<{}, Props> & Props
> {
  public render() {
    ...
    <Field
      name="payoutInput"
      type="text"
      component={this.renderFunc}
      validate={this.validateFunc}
    />
  }
  public validateFunc = (value: string, props: any) => {
    // I want to reference to the component's props
    // props seems to be the Form props
    // this.props doesn't have the latest values
    // because I linked the initial value to the balance in the store
    // so I can see the input is updated once the GET request finishes
    // but when the validation is triggered, the balance is 0 which is the default value
    // modify the input field will trigger validation with the latest balance in the props
  }
}

const ScreenView = reduxForm<{}, Props>({
  form: 'PayoutForm',
  enableReinitialize: true,
})(ScreenView)

export default connect((state: ReduxState) => {
  return {
    // this initialValues is used to set the default input value after a get request finish
    initialValues: {
      payoutInput: String(state.payout.balance),
    },
  }
})(ScreenView)

Как получить последние реквизиты после повторной инициализации начального значения?

ОБНОВЛЕНИЕ После более глубокого изучения реактотрона, я замечаюсобытия происходят в следующем порядке:

form/INITIALIZE
form/REGISTER_FIELD
validateFunc(value == undefined, this.props.balance == 0)
validateFunc(value == 0, this.props.balance == 0)
API RESPONSE ==> this fetches the balance
form/INITIALIZE
validateFunc(value == newBalance, this.props.balance == 0)
form/UPDATE_SYNC_ERRORS ==> this is weird, the doc says returning undefined means the value is valid and in my logic, when value == newBalance, this.props.balance == 0, it returns undefined
MyOwnCustomAction which is used to change the balance in redux store

Этот тип объясняет, почему я не получаю последний баланс, но не объясняет, почему значение параметра может получить последний баланс.С помощью приведенного ниже кода, если значение параметра является последним балансом, баланс в резервном хранилище должен быть таким же, верно?

initialValues: {
  payoutInput: String(state.payout.balance),
},
...