React и Сканер штрих кодов

173
05 июня 2018, 11:30

есть React приложение в котором можно осуществить поиск в списке товаров по имени, id, штрих коду. Весь этот поиск осуществляется с помощью одного input. т.е. вводишь любые данные, а скрипт сам ищет по всем возможным полям и выдает результат.

Есть сканер штрих кода (эмуляция клавиш) ставлю фокус на input, сканирую штрих код и все работает. Но есть нюанс, нужно сделать так, чтобы при повторном сканировании из input стирались старые данные и вводились сканером новые.

Проблемы:

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

Какие советы?

Answer 1

Решение не универсальное, подходит только для штрих кодов стандарта EAN-13. Для других стандартов нужно доработать.

import React from 'react';
import { debounce } from 'lodash';
class Search extends React.Component {
    state = {
        value: '',
        lastValue: ''
    }
    delayedCall = debounce((value) => {
        if(value.length - this.state.lastValue.length === 13 && !/[^[0-9]/.test(value.slice(-13))) {
            this.setState({value: value.slice(-13), lastValue: value.slice(-13)});
            console.log('code -', value.slice(-13));
        } else {
            this.setState({lastValue: value});
            console.log('search - ', value);
        }
    }, 200);
    handleChange = (e) => {
        let value = e.target.value;
        this.setState({value: value});
        this.delayedCall(value);
    }
    render() {
        return (
            <input type="text"
                value={this.state.value}
                onChange={(e) => this.handleChange(e)} 
            />
        );
    }
}
export default FilterForm;
READ ALSO
Перебор массива в js

Перебор массива в js

Не пойму почему не прорабатывает как нужно функция в js:

216
Как создать цикл вывода сообщения? Раз в 5-10 минут?

Как создать цикл вывода сообщения? Раз в 5-10 минут?

Разрабатываю бота на nodejsНужно чтобы бот выводил 1 сообщение раз в 5-10 минут например

153
Таймер обратного отсчета plugin [дубликат]

Таймер обратного отсчета plugin [дубликат]

На данный вопрос уже ответили:

163
Кастомизация балуна метки

Кастомизация балуна метки

1)Подскажите, как добавить изображение в балун?

215