【发布时间】:2019-12-26 19:49:39
【问题描述】:
我创建了一个通知组件。我想在其他组件中使用它
如何在我的 navbar.js 中使用 this.addNotification()?我尝试了很多方法,但都没有奏效,所以也许这里有人知道最好的方法。我会很高兴得到任何帮助!
//Notifications.js
import React from "react";
import ReactNotification from "react-notifications-component";
import "react-notifications-component/dist/theme.css";
export default class Notifications extends React.Component {
constructor(props) {
super(props);
this.addNotification = this.addNotification.bind(this);
this.notificationDOMRef = React.createRef();
}
addNotification() {
this.notificationDOMRef.current.addNotification({
title: "Awesomeness",
message: "Awesome Notifications!",
type: "success",
insert: "top",
container: "top-right",
animationIn: ["animated", "fadeIn"],
animationOut: ["animated", "fadeOut"],
dismiss: { duration: 2000 },
dismissable: { click: true }
});
}
render() {
return (
<div className="app-content">
<ReactNotification ref={this.notificationDOMRef} />
<button ref={this.addNotification} className="btn btn-primary">
Add Awesome Notification
</button>
</div>
);
}
}
//Navbar.js
// I want to use the notifications here, but i don't know how
// this.addNotification() - > this is working in the notifications file, `but not here`
import React from 'react';
import {
Collapse,
Navbar,
NavbarToggler,
NavbarBrand,
Nav,
NavItem,
NavLink,
UncontrolledDropdown,
Dropdown,
DropdownToggle,
DropdownMenu,
DropdownItem, Container, Row, Col } from 'reactstrap';
import LoginModal from './LoginModal';
import User from './User';
// i just import the class
import Notifications from './Notifications';
export default class MyNavbar extends User {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.toggleDropDown = this.toggleDropDown.bind(this);
this.state = {
isOpen: false,
userName: this.getUserLogin(),
userEmail: this.getUserEmail(),
firstTime: this.getFirstTime(),
dropdownOpen: false,
info:""
};
}
showError(){
this.addNotification()
// I want something like this, but i don't know how to do this
}
toggle() {
this.setState({
isOpen: !this.state.isOpen
});
}
toggleDropDown() {
this.setState({
dropdownOpen: !this.state.dropdownOpen
});
}
render(props) {
return (
<div>
<Container>
<Navbar color="da" light expand="md">
<NavbarBrand href="/">Pies Fajny Jest</NavbarBrand>
<NavbarToggler onClick={this.toggle} />
<Collapse isOpen={this.state.isOpen} navbar>
{this.state.userName ?
<Nav className="ml-auto" navbar>
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggleDropDown}>
<DropdownToggle className="btn btn-danger" caret>
{this.state.userName}
</DropdownToggle>
<DropdownMenu>
<DropdownItem header>Header</DropdownItem>
<DropdownItem>Some Action</DropdownItem>
<DropdownItem disabled>Action (disabled)</DropdownItem>
<DropdownItem divider />
<DropdownItem>Foo Action</DropdownItem>
<DropdownItem>Bar Action</DropdownItem>
<DropdownItem onClick={ () => this.logout(this) }>Wyloguj</DropdownItem>
</DropdownMenu>
</Dropdown>
</Nav>
:
<Nav className="ml-auto" navbar>
<NavItem className="LoginRegister" >
<LoginModal
buttonLabel="Zaloguj się"
title="Logowanie"
inputSubmit="Zaloguj się"
/>
</NavItem>
<NavItem className="LoginRegister" >
<LoginModal
buttonLabel="Zarejestruj się"
title="Rejestracja"
inputSubmit="Zarejestruj się"
register="register"
/>
</NavItem>
</Nav>}
</Collapse>
</Navbar>
</Container>
</div>
);
}
}
【问题讨论】:
-
将方法作为道具传递。
-
你能解释一下吗?我是 React @Sohan 的新手
标签: javascript reactjs react-component