首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react中的Reach路由器不会在同一路径上使用urlParams重新呈现。

react中的Reach路由器不会在同一路径上使用urlParams重新呈现。
EN

Stack Overflow用户
提问于 2020-08-23 15:40:41
回答 1查看 274关注 0票数 0

我正在内部UI上创建一个单一页面应用程序。一个菜单出现在屏幕(CollectionsInventory)的左边,其中包含从API调用生成的Link,在右边,结果对象( Collection)显示在他的组件中。道具通过url-parameters传递。我还使用来自patternfly4的一个patternfly4组件来管理UI。看上去是这样的:

代码语言:javascript
复制
<Grid hasGutter>
  <GridItem span={3}>
    {data != null ?
      <CollectionsInventory collections={data[0].collections}/>
    :
      <React.Fragment>
        <Spinner />
      </React.Fragment>
    }
  </GridItem>
  <GridItem span={9}>
    <Router primary={false}>
      <React.Fragment path="/" />
      <Collection path="collection/:collectionName" />
    </Router>
  </GridItem>
</Grid>

问题是,我可以通过单击相应的链接或直接访问它(例如,如果用户希望访问他最喜欢的收藏的书签)来显示一个集合。但后来,的收藏被困在那里。每当我点击一个新的链接,没有什么改变。也许是因为它在同一条路上?有办法使链接触发器重新呈现吗?还是我没有使用正确的组件,因为带有链接的菜单在路由器之外?

CollectionsInventory中,链接显示在表中,并由如下所示的集合名称生成:

代码语言:javascript
复制
const defaultRows = collectionList.map( collection => {
  const collectionLink=`collection/${encodeURI(collection.name)}`

  return {
    cells: [
      {
        title:
          <Link to={collectionLink}>
            {collection.name}
          </Link>,
        name: collection.name
      },
      collection.resourceType,
      collection.size
    ]
  }
});
EN

回答 1

Stack Overflow用户

发布于 2020-08-25 19:33:18

问题是我的Collection组件在更新collectionName支柱时没有重新呈现。当我们更改道具时,反应组件就会重新呈现,但情况显然并非如此。因此,我在props.collectionName中添加了一个效果,以便每当apiFetch进程发生变化时重新启动它,而Voila!每当我选择一个新链接时,Collection组件就会更新。

好处是:确切地说,我使用的fetchApi方法是一个回调,每次修改props.collectionName时它都会被修改。以下是缩短版本:

代码语言:javascript
复制
const Collection = ({ collectionName }) => {
  const fetchData = useCallback(()=>{
    const apiPath = `/collection/${collectionName}`;
    /* do stuff to retrieve the data and set it in the state, or handle errors*/
  },[collectionName]);

  useEffect(()=>{
    fetchData();
  },[fetchData]);

  return(
   /*The actual content*/
  );
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63548909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档