Найдите React / Redux

Я действительно новичок в Reac.js / Redux.js и javascript в целом. Я пытаюсь выучить новый язык, фактически занимаясь этим. Я пытаюсь создать простое приложение, которое позволит вам искать продукт. В конце концов, я создам дополнительные функции, которые позволят пользователю добавлять и удалять элементы из списка продуктов.

Пока что я построил два контейнера: ListOfProd и Search. Все работает, за исключением того, что я не могу понять, как фильтровать список продуктов на основе критериев поиска, введенных пользователем. Где лучше всего реализовать фильтр? и Как лучше всего фильтровать массив объектов на основе критериев поиска? Пожалуйста, дайте мне знать, как я могу улучшить свой код!

Контейнер Search.js

import React, {Component} from 'react';
import {bindActionCreator} from 'redux';
import {connect} from 'react-redux';
//import scroll for search
//import Scroll from './components/Search/Scroll';
import SearchBox from '../components/Search/SearchBox';
//import action for search
import {setSearchField} from '../actions/actionSearch';
//list of prod
import ListOfProd from './ListOfProd';

const mapStateToProps = state =>{
	return{
		product: state.product,
		searchField: state.searchField
	}
}

const mapDispatchToProps = (dispatch) => {
	return{
		onSearchChange: (event) => dispatch(setSearchField(event.target.value))
	}
}

class Search extends React.Component{
	render(){
		const {searchField, onSearchChange} = this.props;
		// const filterProduct = this.props.product.filter(product =>{
		// 	return product.prod.includes(searchField);
		// })
		return(
			<div className = 'tc'>
				<SearchBox searchChange = {onSearchChange}></SearchBox>
				<ListOfProd></ListOfProd>
			</div>
			)
	}
}

export default connect(mapStateToProps, mapDispatchToProps)(Search);



 	

Контейнер ListOfProd.js

// import Component 
// hook it up to data store
import React, {Component} from 'react';
import {bindActionCreator} from 'redux';
import {connect} from 'react-redux';
//import Search from 'Search';

class ListOfProd extends React.Component {

	createListItems(){
	
			console.info(this.props.product);
			
			return this.props.product.map((product, i) => {
			 console.info(this.props.product.prod);
			 console.info(this.props.searchField);
			return(
					<li key = {i}>{product.prod} {product.price}</li>
				)
		});
		
	}

	render(){
		return(
				<ul>
					{this.createListItems()}
				</ul>
			)
	}
}

const mapStateToProps = state =>{
	return{
		product: state.searchProd.product,
		searchField: state.searchProd.searchField
	}
}

export default connect(mapStateToProps)(ListOfProd);

Действия

import {CHANGE_SEARCH_FIELD} from '../constants/constants';
export const setSearchField = (text) => ({
	type: CHANGE_SEARCH_FIELD,
	payload: text
})

Редуктор ReducerSearch.js

import {CHANGE_SEARCH_FIELD} from '../constants/constants';
import React from 'react';
const initialState = {
	searchField: '',
	product : [
		{	
			id: 1,
			prod: "prod1",
			price: "5"

		},
		{
			id:2,
			prod: "prod2",
			price: "5"
		}
	]
}

export const searchProd = (state = initialState, action = {}) =>{
	console.info(action.payload);
	console.info(action.type);
	switch(action.type){
		case CHANGE_SEARCH_FIELD:{
			console.info(action.payload);
			console.info(state.product);

			return {...state, searchField: action.payload};}
		default: 
			return state;
	}
	
	}

App.js

import React, { Component } from 'react';
import SignIn from './components/SignIn/SignIn';
import Register from './components/Register/Register';
import ListOfProd from './containers/ListOfProd';
import Search from './containers/Search';

import './App.css';

class App extends Component {
  render() {

    return (
      <div className = "App">
        <Search></Search>
      </div>

    );
  }
}

export default App;

Пожалуйста, дайте мне знать, если вам нужны мои компоненты.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
123
1

Ответы 1

В общем, лучший способ реализовать фильтрацию - это нажатие клавиши в текстовом поле.

но перед этим вы должны проверить свой источник данных и подумать о своей производительности, вы можете установить ключевое ограничение или другое ограничение.

для вашего второго вопроса я должен сказать, что если ваш массив находится в вашем клиенте, используйте карту, чтобы иметь лучшую производительность, но вы должны получить его с сервера, вы можете делать много вещей

Вы также можете заблокировать обработчик событий, чтобы улучшить производительность и удобство.

whodini9 20.09.2018 18:57

Другие вопросы по теме