javascript - React.js fadeIn + 渲染每个元素的延迟

标签 javascript jquery reactjs flux

所以我使用 FLUX 来管理我的 React 项目。下面是返回字符列表的组件的代码。

import React from 'react';
import {Link} from 'react-router';
import {isEqual} from 'underscore';
import CharacterListStore from '../stores/CharacterListStore';
import CharacterListActions from '../actions/CharacterListActions';

class CharacterList extends React.Component {

  constructor(props) {
    super(props);
    this.state = CharacterListStore.getState();
    this.onChange = this.onChange.bind(this);
  }


  componentDidMount() {
    CharacterListStore.listen(this.onChange);
    CharacterListActions.getCharacters(this.props.params);
  }


  componentWillUnmount() {
    CharacterListStore.unlisten(this.onChange);
  }

  componentDidUpdate(prevProps) {
    if (!isEqual(prevProps.params, this.props.params)) {
      CharacterListActions.getCharacters(this.props.params);
    }
  }

  onChange(state) {
    this.setState(state);
  }


  render() {
    let charactersList = this.state.characters.map((character, index) => {
      return (
        <div key={character.characterId} className='list-group-item animated fadeIn'>
          <div className='media'>
            <span className='position pull-left'>{index + 1}</span>
            <div className='pull-left thumb-lg'>
              <Link to={'/characters/' + character.characterId}>
                <img className='media-object' src={'http://image.eveonline.com/Character/' + character.characterId + '_128.jpg'} />
              </Link>
            </div>
            <div className='media-body'>
              <h4 className='media-heading'>
                <Link to={'/characters/' + character.characterId}>{character.name}</Link>
              </h4>
              <small>Race: <strong>{character.race}</strong></small>
              <br />
              <small>Bloodline: <strong>{character.bloodline}</strong></small>
              <br />
              <small>Wins: <strong>{character.wins}</strong> Losses: <strong>{character.losses}</strong></small>
            </div>
          </div>
        </div>
      );
    });

    return (
      <div className='container'>
        <div className='list-group'>
          {charactersList}
        </div>
      </div>
    );
  }
}

export default CharacterList;

组件通过Action获取数据并更新store,然后根据状态渲染html元素。


我的问题是:我是否有可能实现一些东西,使每个项目单独淡入淡出,渲染上的每个项目都有 500 毫秒的延迟?

我被告知不要在 React 中使用 JQuery,所以我想我正在努力思考 React,感谢任何帮助或建议。提前谢谢你

最佳答案

看看 React 的动画文档 - https://facebook.github.io/react/docs/animation.html#high-level-api-reactcsstransitiongroup

您可以使用 ReactCSSTransitionGroupReactTransitionGroup 来制作动画。

如果你想一个一个地按顺序淡入淡出项目,你可以使用 css transition-delay 属性。

或者,您可以通过递归调用超时函数来控制顺序,该函数将设置组件的状态,将下一个字符连接到 state 直到 this.state.characters.length === state .characters.length (在卸载组件的情况下,一定要在所有字符处理完之前销毁超时函数)

关于javascript - React.js fadeIn + 渲染每个元素的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41282657/

相关文章:

javascript - Ag 网格阻止访问 React 状态变量的当前值

javascript - 如何获取带有颜色列表的下拉菜单?

javascript - 当我按下它们时,我的按钮会下降

javascript - 在同一页面上将滚动方向从垂直更改为水平

reactjs - Styled Components v3 具有空主题对象

javascript - 类型错误 : table is null when adding row to table

javascript - 如何使用 jest 测试 javascript 中的抽象函数?

javascript - Three.js - 如何为 3D View 重现此图像?

javascript - 为什么 _sortBy 不适用于大写字母?

reactjs - 模块解析失败 : Unexpected character '@' (1:0) with Storybook 6. 1.11、Webpack 5.11.0、React 17.0.1