Javascript 使用路径';在数组中查找索引;s params.name在更改路径后延迟
我有一系列的项目。每个项目包含多个图像。通过迭代这个数组,我显示每个名称。我为每个项目分配了Javascript 使用路径';在数组中查找索引;s params.name在更改路径后延迟,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我有一系列的项目。每个项目包含多个图像。通过迭代这个数组,我显示每个名称。我为每个项目分配了Link,导航到包含项目名称的路径。我的意图是获取这个名称,然后显示单击的项目的图像 项目页面也包含下一个项目按钮-单击此按钮将更改路径。我就是这样得到这个新项目的: cart; nextCart; componentDidUpdate(prevProps, prevState, snapshot) { const prevPathname = prevProps.location.pa
Link
,导航到包含项目名称的路径。我的意图是获取这个名称,然后显示单击的项目的图像
项目页面也包含下一个项目按钮-单击此按钮将更改路径。我就是这样得到这个新项目的:
cart;
nextCart;
componentDidUpdate(prevProps, prevState, snapshot) {
const prevPathname = prevProps.location.pathname;
const pathname = this.props.location.pathname;
if (pathname !== prevPathname) {
this.getCarts();
}
}
getCarts = () => {
const name = this.props.match.params.name;
this.cart = this.props.carts.find(value => value.name === name);
const currentIndex = this.props.carts.findIndex(value => value.name === name);
const nextIndex = currentIndex < this.props.carts.length - 1 ? currentIndex + 1 : 0;
this.nextCart = this.props.carts[nextIndex];
};
App.js
function App() {
...
return (
<div className="App">
<Router history={history}>
<ScrollToTop>
<Header/>
{projects ?
<div>
<Route path="/project/:name" component={() => <Project carts={projects}/>}/>
<Route path="/about" component={About}/>
<div className="hs">
<Route path={["/", "/project/:name"]} exact
component={() => <CartHolder carts={projects}/>}/>
</div>
<div className="hs-mobile">
<Route path="/" exact component={() => <CartHolderMobile carts={projects}/>}/>
</div>
</div>
: <div className="black-overlay"/>}
</ScrollToTop>
</Router>
</div>
)
}
函数应用程序(){
...
返回(
{项目?
}/>
}/>
}/>
: }
)
}
如果没有一个可用的示例,很难确定,但是如果它在稍微延迟后工作,则听起来像是从服务器加载了映像(如中所示,映像尚未下载,因此您需要等待从服务器下载映像)。图像初始加载后是否有延迟?换句话说,在第一次显示图像后延迟是否持续
如果是这样,您可以在获取列表后重试。这样,它们就已经加载到客户机上,并且可以立即呈现
希望有帮助。如果不在
中看到render的实现,就很难判断,但这可能是因为在组件上设置属性(this.cart=
)不会导致组件重新呈现。调用setState
将导致重新渲染。许多人想考虑将一些信息存储在组件状态中,而只有一个延迟,当数据已经被设置时,更改数据。换句话说,当我单击按钮更改路径时,会有一个延迟,直到旧项目的图像消失并将替换为新图像。如果查看同一图像两次,会有延迟吗?例如,导航到一个图像(延迟),导航到另一个图像(延迟),导航回第一个图像(无延迟)。如果是这种情况,那么延迟可能是由于等待从服务器加载映像造成的。查看我上面链接的预加载示例。你是对的,它是由图像加载引起的。这看起来很奇怪,因为图像容器组件没有丢失旧图像,而是保留旧图像,直到加载新图像。通过在组件更新时将src的状态设置为null
,我修复了这个问题。
function App() {
...
return (
<div className="App">
<Router history={history}>
<ScrollToTop>
<Header/>
{projects ?
<div>
<Route path="/project/:name" component={() => <Project carts={projects}/>}/>
<Route path="/about" component={About}/>
<div className="hs">
<Route path={["/", "/project/:name"]} exact
component={() => <CartHolder carts={projects}/>}/>
</div>
<div className="hs-mobile">
<Route path="/" exact component={() => <CartHolderMobile carts={projects}/>}/>
</div>
</div>
: <div className="black-overlay"/>}
</ScrollToTop>
</Router>
</div>
)
}