影响 admin-on-rest 中 CustomField 的整个记录值
Affecting the whole record value from a CustomField in admin-on-rest
我在 admin-on-rest's app which internally uses ReduxForm 中有一个编辑组件,代码如下所示:
<Edit {...props} >
<CustomField />
<TextInput source="title" />
</Edit>
我想知道如何将 title
从 CustomField
更改为 title
而无需将其保存在服务器上?
您可以使用自定义 saga 并从 redux-form
调度 change
事件来实现这样的目的。这样说听起来有点复杂,但实际上并非如此。 :)
首先,为您的应用程序实施自定义传奇:
const customSagas = [
MyCustomEntitySagas,
];
const App = () => (
<Admin customSagas={customSagas}>
// ...
</Admin>
);
然后,在您的自定义 saga 中,只需观察您将从 CustomField
发出的动作,例如:
import { change } from 'redux-form';
import { put, takeEvery } from 'redux-saga/effects';
import { CUSTOM_FIELD_CHANGE } from './actions';
export function* watchForCustomFieldChange({ payload }) {
yield put(change('form-record', 'title', payload.newTitle));
}
export default function* root() {
yield [
takeEvery(CUSTOM_FIELD_CHANGE, watchForCustomFieldChange),
];
}
例如,这里有一个您可能想要调度的动作创建者:
export const CUSTOM_FIELD_CHANGE = 'CUSTOM_FIELD_CHANGE';
export const customFieldChange = (newTitle) => ({
type: CUSTOM_FIELD_CHANGE,
payload: { newTitle },
});
这里的关键是Redux Sagas。看起来像很多样板文件,但它确实简化了 final 的开发。
为了防止噪音太大,我尽量做到最短。但请随时询问您是否需要更多信息。 :)
我在 admin-on-rest's app which internally uses ReduxForm 中有一个编辑组件,代码如下所示:
<Edit {...props} >
<CustomField />
<TextInput source="title" />
</Edit>
我想知道如何将 title
从 CustomField
更改为 title
而无需将其保存在服务器上?
您可以使用自定义 saga 并从 redux-form
调度 change
事件来实现这样的目的。这样说听起来有点复杂,但实际上并非如此。 :)
首先,为您的应用程序实施自定义传奇:
const customSagas = [
MyCustomEntitySagas,
];
const App = () => (
<Admin customSagas={customSagas}>
// ...
</Admin>
);
然后,在您的自定义 saga 中,只需观察您将从 CustomField
发出的动作,例如:
import { change } from 'redux-form';
import { put, takeEvery } from 'redux-saga/effects';
import { CUSTOM_FIELD_CHANGE } from './actions';
export function* watchForCustomFieldChange({ payload }) {
yield put(change('form-record', 'title', payload.newTitle));
}
export default function* root() {
yield [
takeEvery(CUSTOM_FIELD_CHANGE, watchForCustomFieldChange),
];
}
例如,这里有一个您可能想要调度的动作创建者:
export const CUSTOM_FIELD_CHANGE = 'CUSTOM_FIELD_CHANGE';
export const customFieldChange = (newTitle) => ({
type: CUSTOM_FIELD_CHANGE,
payload: { newTitle },
});
这里的关键是Redux Sagas。看起来像很多样板文件,但它确实简化了 final 的开发。
为了防止噪音太大,我尽量做到最短。但请随时询问您是否需要更多信息。 :)