gpt4 book ai didi

javascript - 执行不同组件的功能

转载 作者:行者123 更新时间:2023-12-04 10:51:57 24 4
gpt4 key购买 nike

我已经实现了一个标题。每当链接Portfolio单击标题内部,路线更改 - 我想另外触发不同组件的 ( CardHolder ) 功能。我该怎么做?

组件尚未连接。

function App() {
return (
<BrowserRouter>
<div className="App">
<Header/>
...
<CartHolder />
</div>
</BrowserRouter>
);
}
const header = () => {
return (
<div className="Header container-fluid">
<div className="row">
<div className="col-6">

</div>
<div className="col-6">
<ul>
<li>
<Link to="/">Portfolio</Link>
</li>
<li className="ml-4">
About
</li>
</ul>
</div>
</div>
</div>
);
};

顺便说一句 CartHolder是一个基于类的组件。

最佳答案

您可以收听pathname内部变化CartHolder使用 useEffectuseLocation ,查看pathname如果是投资组合路线,则调用该函数

import { useLocation } from 'react-router-dom'

const CartHolder = () => {
const { pathname } = useLocation()

const fn = () => {
console.log('portfolio')
}

useEffect(() => {
if (pathname === '/') {
fn()
}
}, [pathname])

return ...
}

对于基于类的组件,您需要使用 withRouter 包装组件从 react-router-dom 注入(inject) props 的 HOC

然后在 componentDidUpdate检查路线是否是投资组合路线,但还要检查以前的路线是否与投资组合不同,因为 componentDidUpdate 将在每次重新渲染时触发

import { withRouter } from 'react-router-dom'

class CartHolder extends Component {
fn = () => {
console.log('portfolio')
}

componentDidUpdate = prevProps => {
const prevPathname = prevProps.location.pathname;
const { pathname } = this.props.location;

if (pathname === "/" && pathname !== prevPathname) {
this.fn()
}
}

render() {
return...
}
}

关于javascript - 执行不同组件的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59439161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com