YTSearchbar термин подключиться к панели поиска

Я начинающий реагировать. Пока я создавал свое собственное приложение для YouTube, я хотел подключить термин YTSearchbar к панели поиска в моем приложении.

Вот

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import SearchBar from './components/SearchBar';
import YTSearch from 'youtube-api-search';
import VideoList from './components/VideoList';

const API_KEY = 'AIzaSyA5JE7QYKFSlEnRij3tqxYS2XWqG0Au20o';


class App extends Component {
constructor(props) {
    super(props);

    this.state = { videos: [] };

    YTSearch({key: API_KEY, term: "dong"}, (videos) => {
        this.setState({videos}); //access videos on state
      });
}

render() {
    return (
      <div>
        <h1>DongHyun's Youtube Channel</h1>
        <SearchBar />
        <VideoList videos={this.state.videos} />
      </div>
    );
}
}
ReactDOM.render(<App />, document.getElementById('root'));

Поэтому, если я поставлю что-либо в термине "ЧТО-ТО", то я хочу, чтобы оно автоматически перешло в

import React from 'react';
import Button from 'material-ui/Button';

class SearchBar extends React.Component{
constructor(props) {
    super(props);

    this.state = { word: '' };
}

render() {
return (
    <div>
     <input 
     value = {this.state.word}
     onChange={(e) =>this.setState({word: e.target.value})}/>
     <Button color="secondary">Search</Button>
    </div>
    );
}
}

export default SearchBar; 

эта строка поиска ввода.

пожалуйста помоги! Спасибо!!

0 ответов

Во-первых, очистите вашу ссылку на React.Component используя синтаксис ES6. Вместо этого вернитесь к своему оператору импорта и измените его следующим образом:

import React, { Component } from 'react';

Это сохраняет ваш код согласованным, как вы это делали в своем App составная часть. Не забудьте включить изменения из React.Component чтобы просто Component, Да, это синтаксический сахар, но он делает ваш код более чистым и последовательным.

Во-вторых, давайте поговорим об обработке пользовательских событий внутри SearchBar составная часть. Вы можете определить метод с именем:

onInputChange() {

}

прямо под вашим render() метод. Альтернативное имя метода будет handleInputChange(), тебе решать. Так что, как правило, начинается с on или же handle, затем имя элемента, для которого вы наблюдаете изменение, в вашем случае элемент ввода. Таким образом, всякий раз, когда ввод изменяется, JavaScript запускает код, который вы собираетесь поместить в метод выше.

Далее вы хотите передать этот метод элементу ввода. Итак, вы видите, как у вас есть: <input onChange={(e) =>this.setState({word: e.target.value})}/>Вы были на правильном пути. Рефакторинг это так:

<input onChange={this.onInputChange}/>

Все элементы ввода HTML генерируют событие изменения всякий раз, когда пользователь взаимодействует с ними, это обычная вещь HTML в браузере. Чтобы подключиться к обычному событию браузера, все, что нам нужно сделать, это обратиться к обработчику события через this.onInputChange в фигурных скобках, как вы видите выше.

И, как вы знаете, мы заключаем его в фигурные скобки, потому что мы вставляем переменные JavaScript внутри JSX.

Таким образом, мы создаем новый элемент ввода и передаем ему свойство onChange со значением this.onInputChange,

Идем дальше и объявляем обработчик событий вот так, и тогда вам придется пройти event в качестве аргумента внутри обработчика события, например, так:

onInputChange(event) {

}

Все события браузера, которые запускаются элементами HTML, обработчик событий всегда называется event объект. event Объект описывает контекст о произошедшем событии. В этом случае, поскольку он является элементом ввода, вы можете использовать event объект, чтобы получить доступ к значению ввода, другими словами, какой текст был введен, чтобы вызвать изменение, было ли это "ЧТО-ТО" или "что-то еще".

Вы можете проверить это, войдя в консоль event.target.value вот так:

onInputChange(event) {
  console.log(event.target.value);
}
Другие вопросы по тегам