在項目中使用ARc(Atomic React)(這非常棒,我認爲對於最終將要實現的內容,一個企業級的產品),但它只是未來的證明,如果我不把它們拼錯在一起,我目前無法理解我的應用中如何/何時/何地/爲何使用選擇器。在react/redux/saga /選擇器設置中努力工作
看過這個:How is state passed to selectors in a react-redux app?這很棒,但我認爲還需要看幾個實例才能真正得到它。
我試圖解決的當前問題是獲取一個user
對象(可在整個應用程序範圍內訪問),並且通過該數據爲用戶可修改的帳戶設置頁創建一個友好的界面狀態他們自己的名字,電子郵件等。我不想只使用user
商店,因爲他們不希望他們改變任何東西,直到他們實際上提交了,但是確實想用redux維護表單狀態。
我在我的用戶加載哪個都好(可以通過上,我想不同的容器道具訪問): 操作:
export const USER_GET_REQUEST = 'USER_GET_REQUEST'
export const USER_GET_REQUEST_SUCCESS = 'USER_GET_REQUEST_SUCCESS'
export const USER_GET_REQUEST_FAILURE = 'USER_GET_REQUEST_FAILURE'
export const getUserRequest = (params, resolve, reject) => ({
type: USER_GET_REQUEST,
params,
resolve,
reject,
})
export const getUserRequestSuccess = user => ({
type: USER_GET_REQUEST_SUCCESS,
user,
})
export const getUserRequestFailure = error => ({
type: USER_GET_REQUEST_FAILURE,
error,
})
傳奇故事:
import { take, put, call, fork } from 'redux-saga/effects'
import api from 'services/api'
import * as actions from './actions'
export function* readGetUser() {
try {
const data = yield call(api.get, '/user')
yield put(actions.getUserRequestSuccess(data))
} catch (e) {
yield put(actions.getUserRequestFailure(e))
}
}
export function* watchUserGetRequest() {
while (true) {
const { params } = yield take(actions.USER_GET_REQUEST)
yield call(readGetUser, params)
}
}
export default function*() {
yield fork(watchUserGetRequest)
}
減速機:
import { initialState } from './selectors'
import { USER_LOGIN_SUCCESS, USER_GET_REQUEST_SUCCESS } from './actions'
export default (state = initialState, action) => {
switch (action.type) {
case USER_LOGIN_SUCCESS:
return state
case USER_GET_REQUEST_SUCCESS:
return {
...state,
user: action.user,
}
default:
return state
}
}
選擇器(我的廢話代碼評論,單線作品儘可能使user
實際上有用戶數據,但在哪裏計算數據轉到/它是如何到達那裏的。
export const initialState = {
user: {},
}
export const getUser = (state = initialState) => state.user || initialState.user
// export const getUser = (state = initialState) => {
// if (state.user) {
// return Object.assign({}, state, {
// formData: {
// firstName: state.user.firstName,
// lastName: state.user.lastName,
// email: state.user.email,
// phone: state.user.phone,
// },
// })
// }
//
// return initialState.user
// }
代碼幫助是驚人的,清晰的解釋讓我堅定不移的感情和感激+在我的自傳中提到。
您能澄清一下問題嗎?它主要歸結爲「我何時使用選擇器功能」?我知道,Eesh, – markerikson
。我寫了這個問題,並重寫了這個問題10次,試圖從根本上解決混亂問題。是的,何時何地使用選擇器函數,以及如何在這個特定的實例中分離出一些表單數據? – megkadams
你需要閱讀這個問題的每一個答案 - http://stackoverflow.com/q/35411423/1477051 –