Функция поиска не передает функцию React - PullRequest
0 голосов
/ 17 апреля 2020

Используя poke Api, я хочу иметь возможность поиска по любому покемону, введенному в форму поиска.

Когда я вхожу в покемона, он ничего не возвращает компоненту отображения. Используя инструменты Dev (вкладка сети), я вижу, что объект ответа возвращается. Я не могу понять, почему это не рендеринг. Я проверил вызов перед тем, как добавить функцию поиска ранее, предоставив жестко закодированное значение для конечной точки, и оно отображалось очень хорошо.

Компонент приложения

class App extends Component {
    state = {
        pokemonData: {},
        pics: {}
    }

    searchPokemon(pokemon) {
        fetch(`https://pokeapi.co/api/v2/pokemon/${pokemon}`)
            .then(response => response.json())
            .then(data => this.setState({pokemonData: data, pics: data.sprites}))
            .catch(error => `Error fetching and parsing data ${error}`)
    }

    render() {
        return (
            <>
                <Header/>
                <Container className="main-container">
                    <Container className="search-container">
                        <Pokeform onSearch={this.searchPokemon}/>
                    </Container>
                    <Container className="display-container">
                        <Display data={this.state.pokemonData} type={this.state.types} pics={this.state.pics}/>
                    </Container>
                </Container>

            </>
        );
    }
}

Компонент Form и Display оба являются отдельными файлами конечно.

    state = {
        searchText: ''
    }

    onSearchChange = e => {
        this.setState({searchText: e.target.value})
    }

    handleSubmit = e => {
        e.preventDefault();
        this.props.onSearch(this.state.searchText);
        e.currentTarget.reset();
    }

    render() {console.log(this.props.onSearch(this.state.searchText));
        return (
            <>
                <Form className="poke-form" onSubmit={this.handleSubmit}>
                    <Form.Group controlId="formBasicEmail">
                        <Form.Label>Enter Pokemon Name</Form.Label>
                        <Form.Control
                            className="search-input"
                            type="search"
                            onChange={this.onSearchChange}
                            placeholder="Who are you searching for..."
                            name="search"
                        />
                    </Form.Group>
                    <Button className="search-btn" variant="primary" type="submit">
                        Search
                    </Button>
                </Form>
            </>
        );
    }

}

const Display = (props) => {
    return (
        <>
            <h1 className="pokemon-name">{props.data.name}</h1>
            <p>Pokemon number #{props.data.id}</p>
            <img src={props.pics.front_default} className="img-fluid" alt="pokemon-pic-front"/>
            <img src={props.pics.back_default} className="img-fluid" alt="pokemon-pic-back"/>
        </>
    );
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...