我想构建一系列下拉菜单,当鼠标悬停在它们上方时,这些下拉菜单将打开。我正在使用React-Bootstrap进行下拉。我已经定义了一个函数并将其设置在我的构造函数中。但它不会在Chrome中呈现,这告诉我onMouseEnter函数未定义。 我错过了什么导致这种情况发生?我认为我正在遵循基本的React准则,但无法弄清我错过了什么。
import React, { Component } from "react";
import ReactDOM from "react-dom";
import "./Menu.css";
import Dropdown from '../../../../../node_modules/react-bootstrap/Dropdown';
class Menu extends Component {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.onMouseEnter = this.onMouseEnter.bind(this);
this.onMouseLeave = this.onMouseLeave.bind(this);
this.state = {
dropdownOpen: false
};
this.tempData = this.tempData.bind(this);
}
toggle() {
this.setState(prevState => ({
dropdownOpen: !prevState.dropdownOpen
}));
}
onMouseEnter() {
this.setState({dropdownOpen: true});
}
onMouseLeave() {
this.setState({dropdownOpen: false});
}
tempData(){return ...}
MakeDropdowns(data) {
let CreateSubs = function(props){
let set = props.props;
let val=[];
for(var j=0;j<set.length;j++){
val.push(<Dropdown.Item href={set[j].link} key={set[j].name +" " + j}>{set[j].name}</Dropdown.Item>)
}
return val;
}
let list = [];
for(var i=0;i<data.data.length;i++){
let val = data.data[i];
list.push(
<li id="MenuBodyLI" key={val.name+ " " + i}>
<Dropdown onMouseOver={this.onMouseEnter} onMouseLeave={this.onMouseLeave} isOpen={this.state.dropdownOpen} toggle={this.toggle}>
<Dropdown.Toggle variant="secondary" size="sm" id="dropdown-basic">
{val.name}
</Dropdown.Toggle>
<Dropdown.Menu>
<CreateSubs props={val.subtitles}/>
</Dropdown.Menu>
</Dropdown>
</li>
);
}
return list;
}
render() {
const val = this.tempData();
return (
<div className="MenuBody">
<ul id="MenuBodyUL">
<this.MakeDropdowns data={val}/>
</ul>
</div>
);
}
}
export default Menu;
const wrapper = document.getElementById("create-menu");
wrapper ? ReactDOM.render(<Menu />, wrapper) : false;
答案 0 :(得分:0)
尝试以与您的MakeDropdowns
相同的方式进行绑定onMouseEnter
此外,如果MakeDropdowns
是应创建并返回JSX元素的类方法,则应类似执行以下操作:
return (
<div className="MenuBody">
<ul id="MenuBodyUL">
{this.MakeDropdowns(this.data)} // Do not start your methods with capital letter
</ul>
</div>
);
您可以在此处找到一些示例 https://reactjs.org/docs/lists-and-keys.html#embedding-map-in-jsx