Чтобы достичь того, что вы хотите, вам нужно поднять состояние и управлять направлением нажатия по значению внутри компонента Faq
вместо CustomButton
. Таким образом, вы можете управлять уникальным состоянием и отображать то, что вам нужно отображать соответствующим образом.
Упрощенный CustomButton
:
const CustomButton = props => {
return <div onClick={props.handleClick}>{props.children}</div>;
};
И App
компонент теперь управляет состоянием ифункция handleClick
, которая теперь сохраняет нажатой faq
в состоянии. Таким образом, вы можете отобразить данные, основываясь на том, что было нажато
class App extends React.Component {
state = { clickedValue: "" };
handleClick = faq => ev => {
switch (faq) {
case "general":
this.setState({ clickedValue: "div 1" });
break;
case "payment":
this.setState({ clickedValue: "div 2" });
break;
case "business":
this.setState({ clickedValue: "div 3" });
break;
case "online":
this.setState({ clickedValue: "div 4" });
break;
default:
return;
}
};
render() {
return (
<div className="set_faq">
<div
style={{
display: "flex",
flexDirection: "row",
justifyContent: "space-around"
}}
>
<CustomButton handleClick={this.handleClick("general")}>
<button>General FAQ</button>
</CustomButton>
<CustomButton handleClick={this.handleClick("payment")}>
<button>Payment FAQs</button>
</CustomButton>
<CustomButton handleClick={this.handleClick("business")}>
<button>Business FAQs</button>
</CustomButton>
<CustomButton handleClick={this.handleClick("online")}>
<button>Online Sellers</button>
</CustomButton>
</div>
<div>{this.state.clickedValue}</div>
</div>
);
}
}
Рабочий пример здесь: https://codesandbox.io/s/angry-yalow-bvgbe
PS: Я пытался ограничить изменения в вашем коде, чтобы решить вашу проблему, однако,это не лучшая разметка HTML, чтобы иметь button
внутри div
, которая фиксирует событие onClick
.