我有一个反应组件,它使用material-ui tabs
and react-swipeable-views
。我遇到的问题是,切换选项卡时,显示的 url 没有改变,我注意到这是 react-swipeable-views 逻辑。我也想申请react-router
以更改选项卡上的 url,同时保留 react-swipeable-view 逻辑。
以下是我的代码的一部分,其中包含一些其他详细信息:
import SwipeableViews from 'react-swipeable-views';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
export default function TasksViewTabs(props) {
const task = props.match.params.taskid
const classes = useStyles();
const [value, setValue] = React.useState(0);
const handleChange = (event, newValue) => {
console.log('new value', newValue)
setValue(newValue);
};
const handleChangeIndex = (index) => {
setValue(index);
};
console.log('value', value)
return (
<>
<Tabs value={value} onChange={handleChange} classes={{indicator: classes.indicator}}>
<Tab className={value === 0? classes.active_tabStyle : null} label="Runs" {...a11yProps(0)} />
<Tab className={value === 1? classes.active_tabStyle : null} label="Tasks" {...a11yProps(1)} />
<Tab className={value === 2? classes.active_tabStyle : null} label="Settings" {...a11yProps(2)} />
</Tabs>
<SwipeableViews index={value} onChangeIndex={handleChangeIndex}>
<RunApp value={value} index={0} taskid={task} />
<TaskApp value={value} index={1} taskid={task} />
<SettingsApp value={value} index={2} taskid={task} />
</SwipeableViews>
</>
);
}
默认的 url 显示如下所示,更改视图时它不会更改:localhost:3000/clusters/<task:id>
但是我有三个选项卡 ( runs
, tasks
, settings
),它们控制 react-swipeable-views。我希望 url在选项卡更改时分别显示为 ( localhost:3000/clusters/<task:id>/runs
, localhost:3000/clusters/<task:id>/tasks
, ) 。localhost:3000/clusters/<task:id>/settings
我怎样才能做到这一点并保留反应可滑动的逻辑?
谢谢
以防万一,该 url 是从包含表格的组件的 history.push 加载的。仅在单击表格行时。
rowClicked = (params) => {
return (
history.push({
pathname: `/clusters/${params.data.md5_hash}`
})
)
}
谢谢,我希望这会有所帮助:)