【发布时间】:2019-08-10 18:19:40
【问题描述】:
const Create = () => {
console.log('rerender !!')
const [parcelType, setParcelType] = useState('paper')
console.log('parcelType =', parcelType)
return (
<Container onClick={() => setParcelType('plastic')}>
<BookingList />
<Card title="Business">
<p>Header</p>
</Card>
</Container>
)
}
export default Create
单击创建组件中的容器时,我想将 parcelType 状态更改为“塑料”。并且我想在路由更改时将 parcelType 状态重置为“纸张”(创建组件重新渲染)。但是当组件重新渲染状态没有设置为纸张时
更多细节:当 BookingList 组件中路由发生变化时,CreateComponent 会重新渲染
const BookingList = props => {
const { id } = props.match.params
const containerStyle = useTranslateSpring('-100px', '0')
const itemList = items.map((item, idx) => {
const itemStyle = useTranslateSpring('-100px', '0', '0', 200 + 200 * idx)
const url = `/booking/${item.id}/create`
return (
<ItemContainer
onClick={() => props.history.push(url)}
style={itemStyle}
key={item.id}
isactive={id === item.id}
>
{item.id}
</ItemContainer>
)
})
return <Container style={containerStyle}>{itemList}</Container>
}
export default withRouter(BookingList)
通过 routeTemplate 在路由中渲染创建组件
const Routes = () => (
<Router basename={process.env.REACT_APP_BASE_URL}>
<>
<RouteTemplate
exact
path="/booking/:id/create"
component={Booking.create}
title="Booking"
/>
</>
</Router>
)
而RouteTemplate是由PageTemplate组件包裹的渲染组件
const RouteTemplate = props => {
const {
component: Component,
title,
query,
isAuthenticated,
isLanding,
...rest
} = props
return (
<Route
{...rest}
render={matchProps =>
isAuthenticated ? (
<PageTemplate title={title} isLanding={isLanding}>
<Component {...matchProps} query={query} />
</PageTemplate>
) : (
<Redirect
to={{
pathname: '/',
state: { from: props.location },
}}
/>
)
}
/>
)
}
【问题讨论】:
-
何时何地渲染创建组件
-
谢谢我已经在帖子中添加了更多信息。 @ShubhamKhatri
-
好吧,当您通过单击 ItemContainer 更改路线时,还有一个问题,例如从
booking/1/create到booking/2/create,创建组件被重新渲染。而不是我想知道的是,在 createComponent 的 Container onClick 中,您将状态更改为塑料,或者您想在使用不同 id 重新渲染容器时更改它? -
我想在创建组件中单击容器时将其更改为“塑料”。并且我想在路由更改时将 parcelType 状态重置为“纸”(创建组件重新渲染)
-
所以换句话说,你希望组件(特别是它的状态)在路由改变后被重置,对吧?
标签: javascript reactjs react-router-dom react-hooks