2017-03-17 63 views
2

我有一個admin-on-rest的應用程序,它內部使用ReduxForm並且代碼看起來像這樣的編輯組件的整個記錄​​值:影響從的CustomField在管理上休息

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

我想知道如何是否有可能從CustomField更改title而不將其保留在服務器上?

+0

我不確定要完全理解你的意思。你想從你的'CustomField'中更新表單的'title'字段,不是嗎? –

+0

是的,那正是我需要做的。 –

回答

5

您可以使用自定義傳奇並從redux-form派發change事件來實現此目的。這聽起來有點複雜,但事實並非如此。 :)

首先,實現自定義的傳奇給你的應用程序:

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。看起來像很多樣板,但它確實簡化了最終的發展。

我試圖儘可能短,以防止過多的噪音。但隨時問問你是否需要更多信息。 :)

+0

感謝您耐心等待這樣一個信息豐富的答案。這可能是一個天真的問題,但我仍然很難找到對調度功能的引用。 –

+0

沒問題。它來自Redux:http://redux.js.org/docs/api/Store.html#dispatch –

+0

@JonathanPetitcolas如果您可以添加轉換部分,我將非常感激。我是React Redux中的新成員,訪問商店時遇到問題。 –