2016-09-15 211 views
0

我有一個組件必須顯示對象的詳細信息。這通過點擊一行從TableComponent實例化。 對象ID傳遞:Prop始終爲空

<ObjectDetails objectID = {id}/> 

這是我ObjectDetails組件:

class ObjectDetails extends Component { 

componentWillMount() { 
    this.props.dispatch(loadObjectDetails(this.props.objectID)); 
} 

render() { 
    console.log("props------" + JSON.stringify(this.props)); 
    .... 
} 

let select = (state) => ({objectDetails: state.objectDetails}); 

export default connect(select)(ObjectDetails); 

} 

loadObjectDetails填充與objectDetails商店。我可以看到商店確實有詳細信息。 但在render()中,道具始終將objectDetails設置爲null。

不知道我在做什麼錯,請幫忙嗎?

編輯: 添加一些細節

export function loadObjectDetails(objectID) { 
return function (dispatch) { 
Rest.get('/rest/objects/' + objectID).end(
    (err, res) => { 
    if(err) { 
     dispatch({ type: 'FETCH_OBJECT_DETAILS_FAILURE', error: res.body}) 
    } else { 
     dispatch({ type: 'FETCH_OBJECT_DETAILS_SUCCESS', objectDetails: res.body}) 
      } 
    } 
    ) 
    } 
} 

export default function objectDetailsReducer(state={ 
    objectDetails: null, 
    error: null, 
}, action) { 

switch (action.type) { 
case "FETCH_OBJECT_DETAILS_SUCCESS": { 
    return {...state, objectDetails: action.objectDetails, error: null} 
} 
case "FETCH_OBJECT_DETAILS_FAILURE": { 
    return {...state, error: action.error } 
} 
} 
return state 
} 

const middleware = applyMiddleware(promise(), thunk, logger()) 

export default compose(middleware)(createStore)(combineReducers({ reducer1, reducer2, objectDetailsReducer})) 
+0

'export default'語句位於類定義中。錯誤? –

回答

2

對象的mapStateToProps裏面的功能是什麼獲取道具傳遞:

{objectDetails: state.objectDetails} 

所以在你的組件,你可以訪問:this.props.objectDetails。不管什麼屬性。如果你只是想傳遞objectID,更新你的mapStateToProps函數來改變它。

+0

我可以訪問objectID。這是我的日誌裏面渲染顯示: '{「objectID」:「1234」,「objectDetails」:null}' – cmn

+0

對不起,錯過了你的第一行。你可以發佈你的減員的代碼,以及你如何創建你的商店? – agmcleod

+0

在問題 – cmn

1

,如果你想組件獲得新道具時,商店發生變異,你必須使用mapStateToProps可以看到文檔許多樣品:http://redux.js.org/docs/basics/UsageWithReact.html

在示例代碼中,你周圍有=跡象多餘的空格:

<ObjectDetails objectID = {id}/>

componentWillMount當組件掛載時會觸發一次,因此您調度此操作,它會更新存儲,但您沒有mapStateToProps,因此此組件對存儲更新沒有反應。

零部件可以通過mapStateToProps進行反應以存儲,或者您可以保留此組件,但上面的組件必須具有mapStateToProps

你可以閱讀有關同一頁上的表象成分:http://redux.js.org/docs/basics/UsageWithReact.html

組件將嘗試當道具或狀態改變只能重新呈現。如果道具/狀態沒有改變 - 不會發生重新渲染。你的道具不會改變。你完全不使用這個組件的狀態,所以沒有任何變化。

-1

render()方法在第一次渲染時拋出錯誤,這就是爲什麼它不會在props上進行渲染更改。 我修正了該錯誤後重新渲染。

對不起,浪費你的時間!