影响 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>

我想知道如何将 titleCustomField 更改为 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 的开发。

为了防止噪音太大,我尽量做到最短。但请随时询问您是否需要更多信息。 :)