На Redux-формы 6.4.2 я следующий код формы:Когда девственный фактически рассчитан? Это, кажется, всегда быть верным, даже когда форма изменяется
const renderUsers = ({ fields }) => {
const table = (
<table className={styleTable.tbody}>
<thead className={styleTable.thead}>
<tr>
<th>Username</th>
<th>Roles ('acct purch rec')</th>
</tr>
</thead>
<tbody className={styleTable.tbody}>
{fields.map((userFieldName /* , index */) => (
<tr key={userFieldName}>
<td>
<Field name={`${userFieldName}.username`} component="input" disabled />
</td>
<td>
<Field name={`${userFieldName}.roles`} component="input" />
</td>
</tr>
))}
</tbody>
</table>
);
return table;
};
class Form extends Component {
// Ignore state changes with each user update.
shouldComponentUpdate(nextProps) {
return JSON.stringify(this.props.initialValues) !==
JSON.stringify(nextProps.initialValues);
}
render() {
const { loadUsers, handleSubmit, pristine, reset, submitting, invalid } = this.props;
console.log(pristine, invalid, submitting);
return (
<form onSubmit={handleSubmit}>
<Field name="filter"
component={TextField}
props={{ floatingLabelText: 'Starting username', autoFocus: true }}
/>
<RaisedButton label="Filter"
disabled={submitting}
className={style.button}
onClick={() => loadUsers()}
secondary
/>
<br />
<br />
<FieldArray name="users" component={renderUsers} />
<br />
<div>
<RaisedButton label={submitting ? 'Changing...' : 'Change'}
disabled={pristine || invalid || submitting}
className={style.button}
type="submit"
primary
/>
<RaisedButton label="Clear Values"
disabled={pristine || submitting}
className={style.button}
onTouchTap={reset}
secondary
/>
</div>
</form>
);
}
}
Form.propTypes = {
initialValues: PropTypes.object.isRequired,
loadUsers: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
handleSubmit: PropTypes.func.isRequired,
pristine: PropTypes.bool.isRequired,
invalid: PropTypes.bool.isRequired,
reset: PropTypes.func.isRequired,
submitting: PropTypes.bool.isRequired,
};
Я испытываю две проблемы:
- консоль .log выводит
true false false
каждый раз, когда он выводит что-либо. Я ожидал бы этого только на первом выходе, когда первая страница загружается. console.log заявление выводит только что-то в этих точках:
- загрузки страницы
- фокус на поле роли пользователя
- введите в поле фильтра
- нажмите кнопку Фильтр
, но в этих точках ничего не выводится:
- типа в поле роли пользователя
- размытости поле пользователя роль
Я могу видеть из Redux Devtools, что состояние становится обновляется должным образом. Например, первый раз, когда я нажать клавишу в поле роли пользователя, перевождь состояние дифф выглядит следующим образом:
В частности, набрав в поле роли пользователя (или по крайней мере размывания впоследствии) будет должны вызвать визуализацию, а затем нетронутой должна быть ложная, чтобы форма работала. Поскольку ни одна из этих вещей не происходит, кнопка отправки формы остается отключенной.
Я только прошу об этом обоих в том же вопросе в случае, если есть одна простая причина, создающая обе эти проблемы. Основная проблема заключается в том, что кнопка отправки всегда отключена, эти под-вопросы - это то, что мне удалось выяснить.
Это исправлено! (Я все еще немного смущен, почему shouldComponentUpdate() не замечает изменений, поскольку, похоже, что-то похоже на то, что я ожидаю от deepEqual(), но это уже другая история.) Спасибо! :) – Kev
Если вы явно заявляете, что компонент не обновляется (т. Е. Возвращает «false» из 'shouldComponentUpdate', он не может получить обновленную« первозданную »опору. –
Не следует ли возвращать« истину », хотя, операнды не равны после изменения состояния? – Kev