javascript - 无法使用 setState onClick 将变量置于状态

标签 javascript reactjs state setstate

做一个 React 项目并不断遇到类似的问题。在单击时使用 setState 将变量置于状态时遇到问题。在这种情况下,当单击相应的按钮时,我无法将我的播放器对象传递为 ActivePlayer 状态。不过,我可以将其设置为变量,但在应用程序中的其他情况下,我需要将其置于状态中,这似乎是最简单的示例。

import React, { PropTypes } from 'react';
import { connect } from 'react-redux';
import { Link } from 'react-router';
import AdminSubNav from 'components/admin-subnav';
import { getPlayers } from 'api/index.js';
import { archivePlayer } from 'api/index.js';
let players = [];
let activePlayer = {};

export default class PlayerView extends React.Component {
    constructor(props) {
    super(props);
        this.state = {
          players: [],
          activePlayer: {},
          player: {}
        }
    }

    componentWillMount() {
          getPlayers().then((response) => {
                players = response.data;
                console.log(players);
                this.setState({ players:players });
            });
    }

    onClick(player) {
        // let activePlayer = player;
        this.setState({
            activePlayer:player
        });
        console.log(activePlayer);
        console.log(this.state);
        // archivePlayer(this.props.params.id)
        //     .then(() => {
        //         this.context.router.push('/player');
        //     });
    }

    renderPlayers() {
        return players.map((player) => {
            return (
                <tr key={player.id}>
                  <td>{player.NameLast}, {player.NameFirst}</td>
                  <td>{player.teamName}</td>
                  <td><Link to='/'><i className='material-icons small'>create</i></Link></td>
                  <td><button onClick={this.onClick.bind(this, player)}><i className='material-icons small'>delete</i></button></td>
                </tr>
            );
        });
    }


  render () {

    return (
        <div>
            {/*<AdminSubNav title="Player View" route="/team/add"/>*/}
            <div className="admin-table-wrapper">
                <h3>PLAYERS</h3>
                <Link to="/player/add">ADD PLAYER</Link>
                <table className="admin-table">
                <col className="at-col1"/>
                <col className="at-col2"/>
                <col className="at-col3"/>
                <col className="at-col4"/>
                    <thead>
                         <tr>
                             <th data-field='id'>Player Name</th>
                             <th data-field='name'>Team</th>
                             <th data-field='price'>Edit</th>
                             <th data-field='price'>Archive</th>
                         </tr>
                    </thead>
                    <tbody>
                    {this.renderPlayers()}
                    </tbody>
                </table>
            </div>
        </div>
    );
  }
}

最佳答案

您确定这不起作用,还是 console.logs 只是不起作用? setState 是一个异步函数,因此如果您设置状态然后立即查找它可能不存在。尝试在 setState 中使用回调,如下所示:

this.setState({ /* state */ },() => {
   // console.log and check stuff
   // Also do any other function calls that you need to to explicitly   after the state has been updated
})

不确定这是否能解决问题,但记住 setState 的异步性质很重要!

关于javascript - 无法使用 setState onClick 将变量置于状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303781/

相关文章:

javascript - Highcharts 在可拖动的折线图上重绘和排序数据

javascript - 调用两次时的 D3js 代码会复制图形而不是刷新

c++ - 为什么 istream、ostream、iostream、ios_base 都在这里工作

javascript - 我的 javascript 在 chrome 中不工作

javascript - 使用带有箭头函数参数的 filter() 方法

javascript - React useRef 对于条件渲染的元素没有一致更新

reactjs - 如何在点击事件上使用一个复选框发送两个参数?

reactjs - 如何使用 highcharts-react-official 创建极坐标图?

javascript - 警告 : Can't call setState (or forceUpdate) on an unmounted component in React Native

reactjs - 如何从使用状态 Hook 的功能父组件传递 Prop ?