在admin-on-rest中影响CustomField的整个记录​​值

时间:2017-03-17 15:15:07

标签: redux-form admin-on-rest

我在admin-on-rest的应用中有一个编辑组件,内部使用ReduxForm,代码如下:

<Edit {...props} >
    <CustomField />
    <TextInput source="title" />
</Edit>

我想知道如何在title更改CustomField而不将其保留在服务器上?

1 个答案:

答案 0 :(得分:5)

您可以使用自定义传奇来实现此目的,并从change调度redux-form事件。这听起来有点复杂,但事实并非如此。 :)

首先,为您的应用程序实现自定义传奇:

const customSagas = [
    MyCustomEntitySagas,
];

const App = () => (
    <Admin customSagas={customSagas}>
        // ...
    </Admin>
);

然后,在您的自定义传奇中,只需观看您将从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。看起来像很多样板,但它确实简化了最终的发展。

我试图尽可能地缩短以防止太多噪音。但随时可以询问您是否需要更多信息。 :)