javascript - 反应 createElement 和不变的错误
问题描述
我尝试调整此选项卡以做出反应。这个想法是为使用 handleclick 功能单击的键添加活动类
class Tabs extends React.Component {
constructor(props) {
super(props);
this.state = { selected: 0 };
this.handleClick = this.handleClick.bind(this);
}
handleClick(key, event) {
event.preventDefault();
this.setState({
selected: key
});
}
render() {
var activeClass = this.state.selected === this.props.key ? "active" : "";
return (
<React.Fragment>
<div class="tab">
<button
key="1"
className={"tablinks" + activeClass}
onClick={this.handleClick}
>
London
</button>
<button
key="2"
className={"tablinks" + activeClass}
onClick={this.handleClick}
>
Paris
</button>
<button
key="3"
className={"tablinks" + activeClass}
onClick={this.handleClick}
>
Tokyo
</button>
</div>
<div key="1" className={"tabcontent" + activeClass}>
<h3>London</h3>
<p>London is the capital city of England.</p>
</div>
<div key="2" className={"tabcontent" + activeClass}>
<h3>Paris</h3>
<p>Paris is the capital of France.</p>
</div>
<div key="3" className={"tabcontent" + activeClass}>
<h3>Tokyo</h3>
<p>Tokyo is the capital of Japan.</p>
</div>
</React.Fragment>
);
}
}
ReactDOM.render(<Tabs />, document.querySelector(".container"));
但我得到两个错误:
警告:React.createElement:类型不应为 null、未定义、布尔值或数字。它应该是一个字符串(对于 DOM 元素)或一个 ReactClass(对于复合组件)。检查Tabs
.
和
未捕获的错误:不变违规:元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义。检查Tabs
.
解决方案
onClick
处理程序将handleClick
作为第一个参数传递事件,而不是键。如果您想将密钥发送给函数,您可以创建一个handleClick
使用所需参数调用的内联函数。
你还在你的小提琴中使用了一个旧版本的 React,它没有React.Fragment
在 React 16 中引入,class
你最顶层元素上的 propdiv
应该是className
.
例子
class Tabs extends React.Component {
state = { selected: 0 };
handleClick = key => {
this.setState({
selected: key
});
};
render() {
var activeClass = this.state.selected === this.props.key ? " active" : "";
return (
<React.Fragment>
<div className="tab">
<button
key="1"
className={"tablinks" + activeClass}
onClick={() => this.handleClick(1)}
>
London
</button>
<button
key="2"
className={"tablinks" + activeClass}
onClick={() => this.handleClick(2)}
>
Paris
</button>
<button
key="3"
className={"tablinks" + activeClass}
onClick={() => this.handleClick(3)}
>
Tokyo
</button>
</div>
<div className={"tabcontent" + activeClass}>
<h3>London</h3>
<p>London is the capital city of England.</p>
</div>
<div className={"tabcontent" + activeClass}>
<h3>Paris</h3>
<p>Paris is the capital of France.</p>
</div>
<div className={"tabcontent" + activeClass}>
<h3>Tokyo</h3>
<p>Tokyo is the capital of Japan.</p>
</div>
</React.Fragment>
);
}
}
推荐阅读
- angular - 如何在角度 5 中使用 @Injectable 提供的 In root 并获取
- azure - 多个 Azure 应用程序在同一集群上具有独立于版本的通用微服务
- python - 用python 3定义向量中最大偶数的位置?
- c - 奇怪的 c 语句作为结构中的字段
- excel - VBA:编译错误:err.Number 上的预期函数
- jsf - 基于 Primefaces 创建自定义组件
- active-directory - 查找 LDAP 组和成员电子邮件
- reactjs - 映射 Material-UI 卡时未加载图像
- infinispan - Infinispan 库模式复制 TreeCache removeNode 抛出“ISPN000456:缓存不包含原子映射”
- android - Android在父图标下显示嵌套菜单