javascript - react 点击项目以显示详细信息

标签 javascript reactjs api

我是 React 新手,我正在尝试与 swapi API 进行交互。 我想获取电影列表(电影标题列表),并且当我单击标题时显示 json 对象中的 opening_crawl。 我设法将电影标题排列在一个数组中。我不知道如何从这里继续。

这是我的代码:

class StarWarsApp extends React.Component {
  render() {
    const title = "Star Wars";
    const subtitle = "Movies";
    return (
      <div>
        <Header title={title} />
        <Movies />
      </div>
    );
  }
}

class Header extends React.Component {
  render() {
    return (
      <div>
        <h1>{this.props.title}</h1>
      </div>
    );
  }
}

class Movies extends React.Component {
  constructor(props) {
    super(props);
    this.handleMovies = this.handleMovies.bind(this);
    this.state = {
      movies: []
    };
    this.handleMovies();
  }

  handleMovies() {
    fetch("https://swapi.co/api/films")
      .then(results => {
        return results.json();
      })
      .then(data => {
        console.log(data);
        let movies = data.results.map(movie => {
          return <div key={movie.episode_id}>{movie.title}</div>;
        });

        this.setState(() => {
          return {
            movies: movies
          };
        });
      });
  }
  render() {
    return (
      <div>
        <h1>Episodes</h1>
        <div>{this.state.movies}</div>
      </div>
    );
  }
}

ReactDOM.render(<StarWarsApp />, document.getElementById("app"));

最佳答案

要迭代电影,请在渲染方法中添加以下内容:

render(){
  return (
    <div>
      <h1>Episodes</h1>
      {
        this.state.movies.map((movie, i) => {
          return (
            <div className="movie" onClick={this.handleClick} key={i}>{movie.title}
              <div className="opening">{movie.opening_crawl}</div>
            </div>
          );
        })
      }
    </div>
  );
}

将此方法添加到您的电影组件中,以将单击时的事件类添加到具有“movie”className 的 DIV:

handleClick = event => {
  event.currentTarget.classList.toggle('active');
}

将此 css 包含到您的项目中:

.movie .opening {
  display: none;
}

.active .opening {
  display: block
}

关于javascript - react 点击项目以显示详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53570694/

相关文章:

javascript - 从 sqlite 数据库加载数据并打印到 html 元素

javascript - 将值添加到数组中的对象

reactjs - Kendo UI react Treeview 向每个节点添加操作按钮

javascript - 如何让 React 更新组件并在组件更新时运行函数?

reactjs - 目前对于哪种 api 设计适合 React/Redux 应用程序达成共识吗?

javascript - 有没有办法通过API向BigCommerce商店的所有页面添加脚本标签?

python - HttpError 400 错误请求 - Google 管理目录 API (Python)

javascript - 在 HTML 输入字段中选择文件时显示确认

javascript - jQuery .before() 然后找到它的内容并应用 for 循环。我究竟做错了什么

c# - 如何保护将由移动应用程序和 Web 使用的 API