我想在我的应用程序中使用react-joyride
但是有问题。我将我的组件分解为Navbar
和SideNavigation
。它们是独立的子组件。现在,我想先在react-joyride
中使用SideNavigation
,然后在Navbar
中使用最后一步。我怎么能这样做?
这是我的代码
class AgentDashboard extends React.Component {
constructor() {
super();
this.state = {
username: "",
roles: [],
joyrideOverlay: true,
joyrideType: "continuous",
isReady: false,
isRunning: false,
stepIndex: 0,
steps: [],
selector: ""
};
}
componentDidMount() {
this.setState({
isReady: true,
isRunning: true,
});
}
addSteps(steps) {
let newSteps = steps;
if (!Array.isArray(newSteps)) {
newSteps = [newSteps];
}
if (!newSteps.length) {
return;
}
this.setState(currentState => {
currentState.steps = currentState.steps.concat(newSteps);
return currentState;
});
}
callback(data) {
this.setState({
selector: data.type === "tooltip:before" ? data.step.selector : ""
});
}
next() {
this.joyride.next();
}
render() {
const {
isReady,
isRunning,
joyrideOverlay,
joyrideType,
selector,
stepIndex,
steps
} = this.state;
let html;
if (isReady) {
html = (
<div>
<Joyride
ref={c => (this.joyride = c)}
callback={data => this.callback(data)}
debug={false}
disableOverlay={selector === ".card-tickets"}
locale={{
back: <span>Back</span>,
close: <span>Close</span>,
last: <span>Last</span>,
next: <span>Next</span>,
skip: <span>Skip</span>
}}
run={isRunning}
showOverlay={joyrideOverlay}
showSkipButton={true}
showStepsProgress={true}
stepIndex={stepIndex}
steps={steps}
type={joyrideType}
/>
<TopNavigation
username={this.state.username ? this.state.username : ""}
}
roles={this.state.roles}
/>
<main className="imp">
<SideNavigation
currentNav={this.props.location.pathname.substring(1)}
addSteps={steps => this.addSteps(steps)}
selector={selector}
next={() => this.next()}
/>
</main>
</div>
);
}
return (
<div>
{html}
</div>
);
}
}
export default connect(mapStateToProps, mapDispatchToProps)(AgentDashboard);
SideNavigation.js
const sideMenus = [
{
menu: "My Property",
link: "imp/dashboard/my-properties",
icon: "icon-hotel",
class: "hotel-selector"
},
{
menu: "My IMP",
link: "imp/dashboard/my-imps",
icon: "icon-people-outline",
class: "imp-selector"
},
];
class SideNavigation extends React.PureComponent {
componentDidMount() {
const steps = [
{
title: "Trigger Action",
text: "It can be click",
selector: ".imp-dashboard",
position: "right",
type: "hover",
},
{
title: "Advance customization",
text:
"You can set individual styling options for beacons and tooltips.",
selector: ".hotel-selector",
position: "bottom",
allowClicksThruHole: true,
style: {
backgroundColor: "#ccc",
mainColor: "#000",
header: {
color: "#f04",
fontSize: "3rem",
textAlign: "center"
},
footer: {
display: "none"
},
beacon: {
inner: "#000",
outer: "#000"
}
}
}
];
this.props.addSteps(steps);
}
handleClick = e => {
e.preventDefault();
const { next } = this.props;
next();
};
render() {
const { currentNav, selector } = this.props;
const menuToShow = sideMenus.map(menuItem =>
<Menu.Item key={menuItem.link} className={menuItem.class}>
<NavLink
activeClassName={currentNav.includes(menuItem.link) ? "active" : ""}
to={`/${menuItem.link}`}
>
<i className={menuItem.icon} />
<span>
{menuItem.menu}
</span>
</NavLink>
</Menu.Item>
);
return (
<Sidebar.Pushable>
<Sidebar
as={Menu}
width="thin"
visible
icon="labeled"
vertical
inverted
>
<Menu.Item name="dashboard" className="imp-dashboard">
<NavLink
activeClassName={currentNav === "imp/dashboard" ? "active" : ""}
to="/imp/dashboard"
>
<i className="icon-activity" />
<span>Dashboard</span>
</NavLink>
</Menu.Item>
{menuToShow}
</Sidebar>
<Sidebar.Pusher>
<Routes />
</Sidebar.Pusher>
</Sidebar.Pushable>
);
}
}
您是否认为可以将反应 - 兜风与这些成分分解/结构一起使用?我完全不知道如何使用它。有人可以指导我吗?我设法编写上面的代码,我没有得到任何错误,也没有看到任何介绍部分工作时单击按钮。我错过了什么吗?
以下是gist中的代码,以提高可读性
https://gist.github.com/anonymous/bc0121ab23652513c2639a0aa55c4390
答案 0 :(得分:1)
是的,如果组件故障(顶部和侧面导航),则可以使用此类型。 重要的是正确配置&#34; arrayOfSteps&#34;为了兜风。重要的是,要配置&#34;选择器&#34;兜风组件中的步骤属性。
例如,步骤数组可以通过顶部和侧面导航标签。类似的东西:
{
title: 'First Step',
text: 'Start using the <strong>joyride</strong>',
selector: '#first-top_menu',
position: 'bottom-left',
type: 'hover',
isFixed: true,
// optional styling
style:{
.....
}
},
{
title: 'Second Step',
text: 'Start using the <strong>joyride</strong>',
selector: '#second-top_menu',
position: 'bottom-left',
type: 'hover',
isFixed: true,
// optional styling
style:{
.....
}
},
{
title: 'Third Step',
text: 'Start using the <strong>joyride</strong>',
selector: '#first-side_menu',
position: 'bottom-left',
type: 'hover',
isFixed: true,
// optional styling
style:{
.....
}
},