reactjs - if else 语句在反应组件中不起作用
问题描述
我正在尝试在我的反应组件中实现一个条件。当用户触发 onClick 时,状态会更新 allStakes,创建一个包含 4 个值的数组。问题是我不希望用户输入超过 4 个值,因此尝试通过执行 if else 语句来给出限制。我试图在两个语句中添加一个 console.log。奇怪的事实是 setState 得到更新,但 csonole.log 从未显示。即使数组长于 4,组件也会不断呈现我插入的所有值。谢谢进步
import React, { Component } from 'react';
import Stake from './stake';
class FetchRandomBet extends Component {
constructor(props) {
super(props);
this.state = {
loading: true,
bet: null,
value: this.props.value,
allStakes: []
};
}
async componentDidMount() {
const url = "http://localhost:4000/";
const response = await fetch(url);
const data = await response.json();
this.setState({
loading: false,
bet: data.bets,
});
}
render() {
const { valueProp: value } = this.props;
const { bet, loading } = this.state;
const { allStakes } = this.state;
if (loading) {
return <div>loading..</div>;
}
if (!bet) {
return <div>did not get data</div>;
}
return (
< div >
{
loading || !bet ? (
<div>loading..</div>
) : value === 0 ? (
<div className="bet-list">
<ol>
<p>NAME</p>
{
bet.map(post => (
<li key={post.id}>
{post.name}
</li>
))
}
</ol>
<ul>
<p>ODDS</p>
{
bet.map(post => (
<li key={post.id}>
{post.odds[4].oddsDecimal}
<div className="stake-margin">
<Stake
onClick={(newStake) => {
if (allStakes.length <= 3) {
this.setState({ allStakes: [allStakes, ...newStake] })
console.log('stop')
} else if (allStakes.length == 4) {
console.log('more than 3')
}
}}
/>
</div>
</li>
))
}
</ul>
</div>
解决方案
可能是由于不正确的数组解构而发生的。尝试更改此代码:
this.setState({ allStakes: [allStakes, ...newStake] })
由下一个:
this.setState({ allStakes: [newStake, ...allStakes] })
推荐阅读
- java - 需要从 pom.xml 文件进行并行测试的帮助
- spring-security-oauth2 - 我们如何在没有用户名和密码的情况下通过密码验证用户?
- c# - 如何在 RestSharp 中发布许多不同的字段名称?
- angular - 刷新标签面板
- r - 尝试将“chr”列转换为数字会导致 R 中的列充满 NA
- javascript - 您的浏览器不支持直接访问剪贴板。请改用 Ctrl+X/C/V 键盘快捷键
- reactjs - 将每个数组索引渲染为 React 中的每个表
- javascript - 无法安装节点模块,因为“这与 npm 无法找到文件有关。”
- angularjs - ui-grid 表中键盘上下键的导航问题
- python - BeautifulSoup 在 Python 中提取没有类的值