2017-09-14 26 views
0

我想在我的佈局組件中傳遞道具和調用動作。當我嘗試用下面的代碼來完成時,只傳遞初始狀態。 redux商店中的更改未反映出來。將應用商店傳遞給應答路由器redux中的佈局組件?

這是啓動應用程序的代碼。

ReactDOM.render(
    <AppContainer> 
     <Provider store={ store }> 
      <ConnectedRouter history={ history } > 
       <Layout prop={store.getState()}> 
        <Route exact path='/' component={ Dashboard } /> 
        <Route path='/workorder' component={ WorkOrder } /> 
        <Route path='/programs' component={ Programs } /> 
        <Route path='/departments' component={ Departments } /> 
        <Route path='/users' component={ Users } /> 
        <Route path='/fetchdata/:startDateIndex?' component={ FetchData } /> 
       </Layout> 
      </ConnectedRouter> 
     </Provider> 
    </AppContainer>, 
    document.getElementById('react-app') 
); 

這是佈局頁面的代碼。

interface LayoutProps{ 
    prop: any; 
} 

export class Layout extends React.Component<LayoutProps, {}> { 
    public render() { 
     console.log(this.props); 
     return <div> 
        <Header/> 
        <div id="wrapper"> 
         <NavMenu/> 
         { this.props.children } 
        </div> 
       </div>; 
    } 
} 

我的控制檯日誌只打印初始狀態。我不知道爲什麼它沒有得到更新。我只有這個問題的佈局。路線中定義的所有其他組件都使用「連接」進行連接並正常工作。

編輯:這是更新的代碼:

ReactDOM.render(
    <AppContainer> 
     <Provider store={ store }> 
      <ConnectedRouter history={ history } > 
       <Layout> 
        <Route exact path='/' component={ Dashboard } /> 
        <Route path='/workorder' component={ WorkOrder } /> 
        <Route path='/programs' component={ Programs } /> 
        <Route path='/departments' component={ Departments } /> 
        <Route path='/users' component={ Users } /> 
        <Route path='/fetchdata/:startDateIndex?' component={ FetchData } /> 
       </Layout> 
      </ConnectedRouter> 
     </Provider> 
    </AppContainer>, 
    document.getElementById('react-app') 
); 

這是佈局的代碼:

export class Layout extends React.Component<any, {}> { 

    public render() { 
     console.log(this.props); 
     return <div> 
        <Header/> 
        <div id="wrapper"> 
         <NavMenu/> 
         { this.props.children } 
        </div> 
       </div>; 
    } 
} 

export default connect(
    (state: ApplicationState) => state.users, // Selects which state properties are merged into the component's props 
    UsersStore.actionCreators.getCurrentUser    // Selects which action creators are merged into the component's props 
)(Layout) as typeof Layout; 

但只有props.children可用的面板組件中。所有其他道具都是未定義的,即使我通過state.users,UsersStore.actionCreators.getCurrentUser。基本上它不會採取任何從REDX存儲(即使在任何數量的重新渲染)。

回答

2

您需要使用react-reduxconnect enchancer。

import { connect } from 'react-redux' 
import { updateSomething } from 'actions' 


class LayoutComponent extends React.Component { 
    render() { 
    return (
     <div onClick={this.props.updateSomething}> 
     something: {this.props.something} 
     </div> 
    ) 
    } 
} 

export Layout = connect((state) => { 
    return { something: state.something } 
}, { updateSomething })(LayoutComponent) 

編輯:見here以獲取更多信息

+0

請查看更新的問題。我試圖連接佈局。但所有的道具都是未定義的,除了來自路由器的props.children我猜。我在這裏看看你的答案(沒有幫助)。 https://stackoverflow.com/questions/43502291/typescript-redux-exclude-redux-props-in-parent-component –

相關問題