Использование библиотеки Color Thief в React не работает

Я изо всех сил пытаюсь добавить Color Thief в приложение для реагирования. Я следовал инструкциям на github, но ничего не изменилось. Я применил предложения reporte здесь, а затем вставил скрипты в функцию setTimeout, но всегда получаю одну и ту же ошибку:

Использование библиотеки Color Thief в React не работает

Не могли бы вы помочь мне запустить эту библиотеку (или аналогичную, если у вас есть альтернативы) в реакции?

Вот мой код:

import React from 'react';
import './App.css';
var ColorThief = require('color-thief');

function App() {
 setTimeout(function(){
    var colorThief = new ColorThief();
    var img = 'img.jpg';
    var palette = colorThief.getPalette(img, 8);
    var dominant =  colorThief.getColor(img);
    console.info(palette);
    console.info(dominant);
    document.getElementById("app").style.backgroundColor = "rgb(" + dominant + ")";
 }, 3000);

return (
    <div id = "app"></div>
 );
}

export default App;
getPalette/getColor не ожидает строку в качестве параметра.
Caramiriel 17.05.2019 09:36

как я могу передать изображение тогда?

Nad G 17.05.2019 09:51

Для getColor есть getColorFromUrl, но поскольку вам также нужен getPalette, я предлагаю взглянуть на исходный код в github.com/lokesh/color-thief/blob/…. Создайте элемент изображения и после его загрузки передайте его функциям, которые вы уже использовали.

Caramiriel 17.05.2019 10:02

К сожалению, это тоже не работает. Ради подробностей я console.info переменная colorThief, и оказалось, что это пустой объект. Это означает, что var ColorThief = require('color-thief'); ничего не возвращает. Какие-либо предложения?

Nad G 17.05.2019 10:13

Вы нашли решение? потому что я борюсь с этим

Yorbjörn 14.07.2020 09:02

@Yorbjörn Решения внизу довольно хороши. Другим может быть переписывание этой библиотеки в es6, к сожалению

Nad G 15.07.2020 10:13

Спасибо за ответ, к счастью, я нашел другой пакет, который помогает мне. npmjs.com/package/rgbaster

Yorbjörn 15.07.2020 11:40
Поведение ключевого слова "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
7
2 429
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Установите библиотеку с помощью npm:

$ npm i --save colorthief

Импортируйте библиотеку в свой файл как:

import ColorThief from "colorthief";

Создайте ссылка на реакцию для своего изображения следующим образом:

  constructor(props) {
    super(props);

    // Image element reference
    this.imgRef = React.createRef();
  }

Компонент изображения должен выглядеть так:

          <img
            crossOrigin = {"anonymous"}
            ref = {this.imgRef}
            src = {
              "https://images.unsplash.com/photo-1516876437184-593fda40c7ce"
            }
            alt = {"example"}
            className = {"example__img"}
            onLoad = {() => {
              const colorThief = new ColorThief();
              const img = this.imgRef.current;
              const result = colorThief.getColor(img, 25);
            }}
          />

( Пожалуйста, обрати внимание, реквизит изображения должен быть именно в этом порядке)

как магия!!!

Agu Dondo 20.09.2021 18:12
import ColorThief from "colorthief";
import _ from 'lodash';

export const getPalette = (url) => {
    return new Promise((resolve, reject) => {
        if (!url) {
            reject();
        }
        const image = new Image();
        image.src = url;
        image.crossOrigin = 'Anonymous';

        image.onload = function () {
            const colorThief = new ColorThief();
            const palette = colorThief.getPalette(this, 10);
            const result = _.uniq(palette, item => JSON.stringify(item));
            resolve(result);
        }
    });
}

Пожалуйста, опишите немного свое решение, отредактировав свой пост. Это может быть полезно для ОП

Marek Szkudelski 31.03.2020 13:26

Этот код ниже работает для меня. версия: "похититель цветов": "^2.3.2",

import ColorThief from "../../../node_modules/colorthief/dist/color-thief.mjs"; // your node modules path

export const getPalette = (url) => {
 return new Promise(resolve=>{
        const img = new Image();
        img.crossOrigin = 'Anonymous';
        img.onload = () => {
            let colorThief = new ColorThief();
            resolve(colorThief.getPalette(img));
        }
        img.src = url;
    })
}

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