我正在创建一个博客,并且希望在每个帖子下显示文章列表,因此用户无需返回首页。但我不希望他们当前正在阅读的文章出现在列表中。 我正在使用过滤器方法,并且可以正常工作,但仅在瞬间。据我了解,它是由于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>
)
}
答案 0 :(得分:2)
可能是useContext hooh对渲染后返回的数据进行了一些修改。
通过过滤器或地图,您实际上根本没有更改任何全局状态或局部状态。
在上述更新之后,您的数据项可能正在更改。另外,您的过滤器功能还需要使用永不更改的ID或类似的名称进行过滤,以便您的过滤器结果在所有渲染或状态更新中保持一致。
data.filter(item => {return item.id !== article.id})
对于这样的对象也使用相等性将不适用于您的过滤条件。您使用不相等的标准,是的,在渲染之后,item
在后续渲染中将不等于article
,即使它们在一个渲染中是相同的引用。 Object.is
检查了这种相等性,这是特定的需求。但我认为您只需要id
支票即可。