不能渲染react-bootstrap ModalTrigger
Can't render react-bootstrap ModalTrigger
我是ReactJS的新手,我在渲染ModalTrigger时遇到了麻烦,该触发器旨在在单独的组件中显示/隐藏模态。我使用的样板是react-starter-kit。
返回的错误是:"常量违反:元素类型无效:期望是字符串(对于内置组件)或类/函数(对于组合组件),但得到的是:未定义。"检查MenuButton
的渲染方法
似乎不太可能在返回.....之前将组件转换为字符串下面是代码:
import React, {PropTypes, Component} from 'react';
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import ModalTrigger from 'react-bootstrap';
import Menu from '../Menu';
import s from './MenuButton.css';
class MenuButton extends Component {
static getInitialState() {return {isMenuOpen: false}};
constructor() {
super();
this.state = {isMenuOpen: false};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
if(this.state) {
this.setState({isMenuOpen: !(this.state.isMenuOpen)});
}
}
render() {
var btnImage = require('./menuButton.svg');
var show = {show: this.state};
console.log('menu ' + <Menu/>);
return (
<ModalTrigger modal={<Menu />}>
<div className={s.menuBtn}>
<a onClick={this.handleClick.bind(this)}>
<img className={s.menuBtnImg} src={btnImage}/> {show} {this.state.isMenuOpen ? 'Stäng meny' : 'Meny'}
</a>
</div>
</ModalTrigger>
);
}
}
export default withStyles(s)(MenuButton);
然后是modal:
import React, { Component } from 'react';
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import s from './Menu.css';
class Menu extends Component {
static getInitialState() {return {show: false}};
static showModal(){
this.setState({show: true});
};
static hideModal() {
this.setState({show: false});
}
render() {
if (!this.state.show) {
return <span/>;
}
return (
<Modal {...this.props} title='Meny' animation={true}>
<div className='modal-body'>
<ul>
<a href="#main"><li>Startsida</li></a>
<a href="#omoss"><li>Om oss </li></a>
<a href="#reminiscens"><li>Reminiscens</li></a>
<a href="#appen"><li>Appen</li></a>
<a href="#stories"><li>Berättelser</li></a>
<a href="#nyheter"><li>Nyheter om projektet</li></a>
<a href="#englishinfo"><li>Info in English</li></a>
</ul>
</div>
</Modal>
);
}
}
export default withStyles(s)(Menu);
不支持使用ModalTrigger
。似乎你已经开始研究另一种解决方案:使用组件状态而不是<ModalTrigger/>
进行模态逻辑。这里有一个简单的例子。在文档中了解更多信息。
const Modal = ReactBootstrap.Modal;
class Menu extends React.Component {
constructor() {
super();
this.state = { isMenuOpen: false };
this.handleOpen = this.handleOpen.bind(this);
this.handleClose = this.handleClose.bind(this);
}
handleOpen() {
this.setState({ isMenuOpen: true });
}
handleClose() {
this.setState({ isMenuOpen: false });
}
render() {
return (
<div>
<button onClick={this.handleOpen}>Trigger Menu</button>
<Modal show={this.state.isMenuOpen} onHide={this.handleClose}>
<ul>
<li>This</li>
<li>is</li>
<li>the</li>
<li>menu!</li>
</ul>
</Modal>
</div>
);
}
}
ReactDOM.render(<Menu/>, document.getElementById('View'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-bootstrap/0.30.5/react-bootstrap.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css">
<div id="View"></div>
相关文章:
- 使用Re-base时,在React中从状态绑定和取消绑定Firebase
- 有没有一种优雅的方式来告诉esint,以确保我们're没有使用任何ES6语法/函数
- JavaScript FileReader中readAsDataURL()与readAsArrayBuffer()和re
- 在窗口上运行Meteor;您're不在Meteor项目目录中”;升级到Meteor.js 1.3之后
- 匹配单词中两个相等的字符,并替换为一个RE
- 搜索JS文件您're表示字符串
- 使用 ReactFire 或 Re-base 显示来自 Firebase 的用户特定数据
- RE-在PHP页面中打印包含其数据的特定表单
- 元素没有显示在包装中,它们're在下面
- 有人能解释一下下面的javascript RE代码吗
- 'babelHelpers.taggedTemplateLiteral'在使用标记的模板字符串时,在re
- TinyMCE UpdatePanel Re Init Issue
- 不能渲染react-bootstrap ModalTrigger
- CustomElements.js:596Uncaught TypeError: Cannot assign to re
- 尝试在JSF页面中使用Three.js - ShaderMaterial,未捕获TypeError: Cannot re
- 获取"TypeError: document.getElementById(..)是null"当re
- Javascript issue re form reset
- 真的很困惑re:如何在云代码中正确使用Parse Promises
- morris.js setData causes "Uncaught TypeError: Cannot re
- RE: implementing rest / jquery with JS