【问题标题】:Reactjs sort and filter componentReactjs 排序和过滤组件
【发布时间】:2018-12-04 07:14:29
【问题描述】:

我是 React 新手。我已经为分配实现了以下代码。目标是获取电影列表,并在单击电影时显示开场爬行。我决定为此使用两个组件,因为必须完成样式(左侧的电影,右侧的抓取)。

现在我需要另外两个选项:按年份或 id 对电影进行排序,并使用上方的搜索栏进行过滤。

如何在组件中做到这一点?

这是我的代码:

import React, { Component } from 'react';
import './App.css';

class StarWarsApp extends React.Component{
    constructor(props){
        super(props);
        this.handleSort = this.handleSort.bind(this);
        this.handleMovies = this.handleMovies.bind(this);
        this.handleClick = this.handleClick.bind(this);
        this.state = {
            movies: [],
            crawl: ['No movie selected']
        }

        this.handleMovies();
    }

    handleMovies(){
        fetch('"https://swapi.co/api/films"').then(results => {
            return results.json();
        }).then(data => {

            let movies = data.results;
            console.log(movies);
            this.setState(() => {
                return{ 
                    movies: movies 
                }
            })
        })
    }

    handleClick(event){
        fetch('https://swapi.co/api/films'+event.currentTarget.id).then(results => {
            return results.json();
        }).then(data => {
            let crawl = data.results.opening_crawl;
            this.setState(() => {
                return{ 
                    crawl:crawl 
                }
            })
        })
    }

    render(){
        const title = 'Star Wars';
        return(
            <div>
                <Header title={title}/>
                <Sort  handleSort={this.handleSort}/>
                <Movies handleClick={this.handleClick} movies={this.state.movies}/>
                <Crawl crawl={this.state.crawl}/>
            </div>
        )
    }
}   


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

class Movies extends React.Component{
    render(){
        return(
            this.props.movies.map((movie) => 
            <div onClick={this.props.handleClick} id={movie.episode_id} key={movie.episode_id}>
                {
                <p><Movie title={movie.title}/></p> 
                }
            </div>
            )
        )
    }
}

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

class Crawl extends React.Component{
    render(){
        return(
            <div className="split right">
                {this.props.crawl}
            </div>
        )
    }
}


export default StarWarsApp;

【问题讨论】:

    标签: reactjs sorting


    【解决方案1】:

    你的handlesort函数应该是这样的:

    handleSort = () => {
      let copyOfMovies = this.state.movies.slice();
      const sortedMovies = movies.sort((a,b) => {
        const nameA = a.name.toUpperCase(); // ignore upper and lowercase
        const nameB = b.name.toUpperCase(); // ignore upper and lowercase
        if (nameA < nameB) {
          return -1;
        }
        if (nameA > nameB) {
          return 1;
        }
        return 0;
      });
      this.setState({movies:sortedMovies})
    }
    

    【讨论】:

    • 谢谢!虽然我不知道在哪里渲染这个。在父组件上?
    • 我看到您有一个 组件,但我在您的代码中没有看到 Sort 组件。假设您有一个带有相关 JSX 的 Sort 组件和一个事件 chandle(可能是一个 onClick 事件),您需要将上面的代码添加到父组件和您的 Sort 组件中,类似于 或如果您绑定到构造函数则跳过箭头函数。你能告诉我它是否有效吗?
    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多