我的组件中有一个navigation
和一个drawer
类(在不同的文件中)。我希望能够在navigation
类中具有一个菜单按钮,该按钮可以打开和关闭抽屉。我在toggleStatus
类中有一个drawer
方法,它将drawerStatus
的状态更改为打开/关闭。如何从toggleStatus
类中访问navigation
方法?我正在为所有组件使用材料设计。
答案 0 :(得分:1)
如果navigation
和drawer
组件是父组件的子组件,则声明一个方法来更新drawerStatus
并将其作为prop传递给navigation
并向该父组件添加状态组件并将其作为道具传递给drawer
。就像这样:
class ParentComponent extends Component {
constructor() {
this.state = { isDrawerOpen: false };
}
toggleDrawer = () => {
this.setState({ isDrawerOpen: !this.state.isDrawerOpen });
}
render() {
return (
<div>
<NavigationComponent toggleDrawer={this.toggleDrawer} />
<DrawerComponent drawerStatus={this.props.isDrawerOpen} />
</div>
);
}
}
答案 1 :(得分:1)
您可以将其作为道具传递。
I.E。 我有这个继承体系:
<Foo>
<Bar/>
</Foo>
在foo内部,您有一个名为toggle的函数。
toggle(){
console.log('triggered')
}
您可以将切换作为道具传递给Bar:
<Bar
toggleInBar={this.toggle.bind(this)}
/>
和内部bar组件中,可以将toggleInBar用作道具。
this.props.toggleInBar
将触发日志记录:)
P.S。
我故意用不同的名字来区分功能:)
答案 2 :(得分:0)
我会这样处理: 1-您的按钮类可能看起来像这样:
import React from 'react'; // import react module
import PropTypes from 'prop-types'; // ES6
const Button = (props) => {
return (
<input
type="button"
onClick={props.handleClick}
value={props.label}
/>
);
}
// describe our expected props types
Button.propTypes = {
type: PropTypes.string.isRequired,
handleClick: PropTypes.func.isRequired,
label: PropTypes.string.isRequired
}
// export our button component.
export default Button;
您的父组件可能是这样的:
import React from 'react'; // import react module
import Button from './button'; // Import our button component from this directory
// create a class which extends react component
class Frame extends React.Component {
constructor() {
super();
this.handleClick = this.handleClick.bind(this);
}
// our method to handle all click events from our buttons
handleClick(event){
const value = event.target.value; // get the value from the target element (button)
switch (value) {
case '1': {
//handler for tia button with lable "1"
break;
}
default: {
// your default implementation
break;
}
}
}
// Render function to creat component to be rendered on the DOM.
// This method must return a single parent element as you can see here.
// The component is wrapped around () to make it a single expression.
render() {
return (
<div className="frame">
<Button className='btn-primary' label={'1'} handleClick={this.handleClick} type='input' />
);
}
}
// export our frame component. To be used in our client/index.js file
export default Frame;