簡體   English   中英

React-Router v4-將參數傳遞給withRouter

[英]React-Router v4 - pass parameters to withRouter

這段代碼可以正常工作:

const LinkButton = withRouter(({ history }) => (

  <ListItem button onClick={() => history.push('/url1')}>
    <ListItemIcon>
      <ListIcon />
    </ListItemIcon>
    <ListItemText primary="name1" />
  </ListItem>
))

現在,我嘗試將數組映射到相同的組件並得到錯誤:

const navItems = [{ name: 'name1', url: '/url1' }, { name: 'name2', url: '/url2' }];



 const items = navItems.map(
  item => withRouter(({ history }) => (

    <ListItem button onClick={() => history.push(item.url)}>
      <ListItemIcon>
        <ListIcon />
      </ListItemIcon>
      <ListItemText primary={item.name} />
    </ListItem>
  ))()
);

錯誤文本:TypeError:無法讀取未定義的屬性'wrappedComponentRef'。

有任何想法嗎?

withRouter是一個高階組件,它返回組件類MyComponent )而不是組件實例<MyComponent /> )。

另外, LinkButton是硬編碼的; 它不接受道具道具。

然后,您需要更新至以下內容:

let LinkButton = ({ history, ...item }) => (

  <ListItem button onClick={() => history.push(item.url)}>
    <ListItemIcon>
      <ListIcon />
    </ListItemIcon>
    <ListItemText primary={item.name} />
  </ListItem>
);

LinkButton = withRouter(LinkButton);

現在,循環應為:

navItems.map(item => <LinkButton {...item} key={item.name} />);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM