React - 在点击时改变 CSS 属性(箭头函数)
React - Changing CSS property on click (arrow function)
我的一个 React/Gatsby 文件中包含以下内容:
import React from "react"
const click = () => {
console.log("J");
}
const NavButton = () =>
<button className="navbar-toggler navbar-toggler-right" style={{backgroundColor: 'blue', position: "absolute", margin: "30px"}}type="button" data-toggle="collapse" data-target="#collapsingNavbar" onClick={click}>
<div id="nav-icon1">
<span></span>
<span></span>
<span></span>
</div>
</button>
const Dropdown = () =>
<div style={{visibility: "hidden", backgroundColor: "blue", position: "absolute", height: "100%", width: "100%"}}>
</div>
export default (props) =>
<div className="left col-xs-12 col-md-6">
<Dropdown />
<NavButton />
{props.children}
</div>
现在我想在有人按下 NavButton
时触发 click()
,然后我想让 Dropdown
可见。我该怎么做?现在我硬编码了 Dropdown
有 style={{visibility: "hidden", ...
.
我也想知道我这样做是否正确,将所有内容都松散地放在这些不同的函数中,如果有人能告诉我那就太好了!
您的控件 class 需要是有状态的:它需要保持关于下拉列表是打开还是关闭的布尔状态。渲染下拉菜单时,如果布尔值是打开的,那么你会显示下拉菜单,否则你不会。
这是您为此重写的代码。注意 child 组件将 props 作为参数。这就是 parent 与他们交流的方式。其中一些道具是回调,这就是 child 与 parent 通信的方式。
import React from "react"
const NavButton = ({onClick}) =>
<button className="navbar-toggler navbar-toggler-right" style={{backgroundColor: 'blue', position: "absolute", margin: "30px"}}type="button" data-toggle="collapse" data-target="#collapsingNavbar" onClick={onClick}>
<div id="nav-icon1">
<span></span>
<span></span>
<span></span>
</div>
</button>
const Dropdown = ({show}) =>
<div style={{visibility: show ? "visible" : "hidden", backgroundColor: "blue", position: "absolute", height: "100%", width: "100%"}}>
</div>
export default class Parent extends React.Component {
state = {
dropdownVisible: false,
};
// toggles the dropdown each time it is called
toggleDropdown = () => this.setState(state => ({
dropdownVisible: !state.dropdownVisible,
}));
render() {
return (
<div className="left col-xs-12 col-md-6">
<Dropdown show={this.state.dropdownVisible} />
<NavButton onClick={this.toggleDropdown} />
{this.props.children}
</div>
);
}
}
我的一个 React/Gatsby 文件中包含以下内容:
import React from "react"
const click = () => {
console.log("J");
}
const NavButton = () =>
<button className="navbar-toggler navbar-toggler-right" style={{backgroundColor: 'blue', position: "absolute", margin: "30px"}}type="button" data-toggle="collapse" data-target="#collapsingNavbar" onClick={click}>
<div id="nav-icon1">
<span></span>
<span></span>
<span></span>
</div>
</button>
const Dropdown = () =>
<div style={{visibility: "hidden", backgroundColor: "blue", position: "absolute", height: "100%", width: "100%"}}>
</div>
export default (props) =>
<div className="left col-xs-12 col-md-6">
<Dropdown />
<NavButton />
{props.children}
</div>
现在我想在有人按下 NavButton
时触发 click()
,然后我想让 Dropdown
可见。我该怎么做?现在我硬编码了 Dropdown
有 style={{visibility: "hidden", ...
.
我也想知道我这样做是否正确,将所有内容都松散地放在这些不同的函数中,如果有人能告诉我那就太好了!
您的控件 class 需要是有状态的:它需要保持关于下拉列表是打开还是关闭的布尔状态。渲染下拉菜单时,如果布尔值是打开的,那么你会显示下拉菜单,否则你不会。
这是您为此重写的代码。注意 child 组件将 props 作为参数。这就是 parent 与他们交流的方式。其中一些道具是回调,这就是 child 与 parent 通信的方式。
import React from "react"
const NavButton = ({onClick}) =>
<button className="navbar-toggler navbar-toggler-right" style={{backgroundColor: 'blue', position: "absolute", margin: "30px"}}type="button" data-toggle="collapse" data-target="#collapsingNavbar" onClick={onClick}>
<div id="nav-icon1">
<span></span>
<span></span>
<span></span>
</div>
</button>
const Dropdown = ({show}) =>
<div style={{visibility: show ? "visible" : "hidden", backgroundColor: "blue", position: "absolute", height: "100%", width: "100%"}}>
</div>
export default class Parent extends React.Component {
state = {
dropdownVisible: false,
};
// toggles the dropdown each time it is called
toggleDropdown = () => this.setState(state => ({
dropdownVisible: !state.dropdownVisible,
}));
render() {
return (
<div className="left col-xs-12 col-md-6">
<Dropdown show={this.state.dropdownVisible} />
<NavButton onClick={this.toggleDropdown} />
{this.props.children}
</div>
);
}
}