значение не регистрируется в консоли

#reactjs #logging #parameters #console #arguments

#reactjs #ведение журнала #параметры #консоль #аргументы

Вопрос:

Значения состояния передаются в реквизитах searchYelp в качестве параметров в функции handleSearch. Значения должны регистрироваться в консоли с помощью onClick. Однако аргумент, переданный в параметр term, не регистрируется в консоли, в то время как два других аргумента (местоположение, сортировка) регистрируются в консоли.

 import React, {useState} from 'react';
import './SearchBar.css';

const sortByOptions = {
    'Best Match': 'best_match',
    'Highest Rated': 'rating',
    'Most Reviewed': 'review_count'
}

function SearchBar({ searchYelp }) {
    const [ term, setTerm ] = useState('');
    const [ location, setLocation ] = useState('');
    const [ sortBy, setSortBy ] = useState('best_match');

    const getSortByClass = (sortByOption) => {
        if(sortBy === sortByOption) {
            return 'active';
        } else {
            return '';
        }
    }

    const handleSortByChange = (sortByOption) => {
        setSortBy(sortByOption);
    }

    const handleTermChange = ({ target }) => {
        setTerm(target.value);
    }

    const handleLocationChange = ({ target }) => {
        setLocation(target.value)
    }

    const handleSearch = (e) => {
        searchYelp(term, location, sortBy);
        e.preventDefault();
    }

    const renderSortByOptions = () => {
        return Object.keys(sortByOptions).map((sortByOption) => {
            let sortByOptionValue = sortByOptions[sortByOption];
            return <li onClick={()=>handleSortByChange(sortByOptionValue)} className={getSortByClass(sortByOptionValue)} key={sortByOptionValue}>{sortByOption}</li>
        })
    }

    return(
        <div className="SearchBar">
            <div className="SearchBar-sort-options">
                <ul>
                    {renderSortByOptions()}
                </ul>
            </div>
            <div className="SearchBar-fields">
                <input onchange={handleTermChange} placeholder="Search Businesses" />
                <input onChange={handleLocationChange} placeholder="Where?" />
            </div>
            <div className="SearchBar-submit">
                <a onClick={handleSearch} href="#">Let's Go</a>
            </div>
        </div>
    )
}

export default SearchBar;

import React from 'react';
import './App.css';
import BusinessList from '../BusinessList/BusinessList';
import SearchBar from '../SearchBar/SearchBar';

const business = {
  imageSrc: 'https://content.codecademy.com/programs/react/ravenous/pizza.jpg',
  name: 'MarginOtto Pizzeria',
  address: '1010 Paddington Way',
  city: 'Flavortown',
  state: 'NY',
  zipCode: '10101',
  category: 'Italian',
  rating: 4.5,
  reviewCount: 90
}

const businesses = [business, business, business, business, business, business]

function App() {
  const searchYelp = (term, location, sortBy) => {
    console.log(`you are searching ${term} ${location} ${sortBy}`)
  }

  return (
    <div className="App">
      <h1>ravenous</h1>
      <SearchBar searchYelp={searchYelp} />
      <BusinessList businesses={businesses}/>
    </div>
  );
}

export default App;
 

Комментарии:

1. это означает, что ваш термин не устанавливается. Вы можете проверить, какое значение вы получаете в handleTermChange

Ответ №1:

<input onchange={handleTermChange} placeholder="Search Businesses" />

onchange должен быть верблюжьим регистром, поскольку onChange

Комментарии:

1. Большое спасибо. Мне нужно быть более ориентированным на детали.