如何在不更改全局状态的情况下更改本地状态

时间:2020-07-29 09:40:21

标签: javascript reactjs

我正在创建一个博客,并且希望在每个帖子下显示文章列表,因此用户无需返回首页。但我不希望他们当前正在阅读的文章出现在列表中。 我正在使用过滤器方法,并且可以正常工作,但仅在瞬间。据我了解,它是由于useContext而发生的。我不想更改全局状态,只能更改本地状态。

const ArticleDetails = (props) => {

 const {data} = useContext(ArticleContext); //data with all fetched articles from db

 const article = props.location.state.article; //data for individual article

 return (
  <div>

  //showing here data for individual post that i passed in props

    {data.filter(item => {return item !== article})
         .map(item => {return <ArticleList articleTitle={item.title} key={item.id} />})}
  </div>
 )
}

1 个答案:

答案 0 :(得分:2)

可能是useContext hooh对渲染后返回的数据进行了一些修改。

通过过滤器或地图,您实际上根本没有更改任何全局状态或局部状态。

在上述更新之后,您的数据项可能正在更改。另外,您的过滤器功能还需要使用永不更改的ID或类似的名称进行过滤,以便您的过滤器结果在所有渲染或状态更新中保持一致。

data.filter(item => {return item.id !== article.id})

对于这样的对象也使用相等性将不适用于您的过滤条件。您使用不相等的标准,是的,在渲染之后,item在后​​续渲染中将不等于article,即使它们在一个渲染中是相同的引用。 Object.is检查了这种相等性,这是特定的需求。但我认为您只需要id支票即可。