Есть две проблемы. Учебное пособие импортирует Product следующим образом:
import Product from './Product.js';
, но затем учебное пособие ссылается на него позже как <product
, когда оно должно быть <Product
.
Вторая проблема заключается в том, что закрывающий тег Product
</product>
должен быть либо внутри оператора return вместе с открытым тегом Product
, либо просто использовать самозакрывающийся тег, подобный этому: [ 1111]
{productsToDisplay.edges.map((el, i)=> {
return(
<Product key="{i}" product="{el.node}" />
)
})}
Таким образом, ваш полный оператор возврата должен выглядеть следующим образом:
return (
<div classname="App">
<div classname="products-grid">
{productsToDisplay.edges.map((el, i)=> {
return(
<Product key="{i}" product="{el.node}" />
)
})}
</div>
</div>
);
Кредиты @RyanCogswell за то, что они обратили внимание на другую проблему с заглавной буквой P в <products>
. [1113 ]
Вы, вероятно, хотите преобразовать цвета в модель HSL (Оттенок, Насыщенность, Легкость) и затем сравнить значения в порогах в порядке HSL. Если оттенок в рамках допуска, который считают как "близко", то проверьте "близость" насыщенности и затем легкость.
Я не уверен ни в каких алгоритмах, можно хотеть считать преобразование RGB (Красный, Зеленый, Синий) значения в к HSB (Оттенок, Насыщенность, Яркость).
Оттенок является по существу "цветом", таким образом, можно выдержать сравнение просто о том, как близко значения Оттенка.
Я знаю, что этому вопросу 10 лет, но ответ расширяющегося Joe Zack:
Вот мой код Kotlin
//Entry point here
//Color must be hexa for example "#829381"
fun calculateColorDistance(colorA: String, colorB: String): Double {
val aColorRGBArray = getColorRGBArray(colorA)
val bColorRGBArray = getColorRGBArray(colorB)
val aColorLAB = getColorLab(aColorRGBArray)
val bColorLAB = getColorLab(bColorRGBArray)
return calculateColorDistance(aColorLAB, bColorLAB)
}
private fun calculateColorDistance(aColorLAB: DoubleArray, bColorLAB: DoubleArray): Double {
val lab = aColorLAB[0] - bColorLAB[0]
val aab = aColorLAB[1] - bColorLAB[1]
val bab = aColorLAB[2] - bColorLAB[2]
val sqrtlab = lab.pow(2)
val sqrtaab = aab.pow(2)
val sqrtbab = bab.pow(2)
val sum = sqrtlab + sqrtaab + sqrtbab
return sqrt(sum)
}
private fun getColorRGBArray(color: String): IntArray {
val cleanColor = color.replace("#", "")
val colorInt = Integer.parseInt(cleanColor, 16)
val r = Color.red(colorInt)
val g = Color.green(colorInt)
val b = Color.blue(colorInt)
return intArrayOf(r, g, b)
}
private fun getColorLab(colorRGB: IntArray): DoubleArray {
val outLab = doubleArrayOf(0.0,0.0,0.0)
ColorUtils.RGBToLAB(colorRGB[0], colorRGB[1], colorRGB[2], outLab)
return outLab
}
calculateColorDistance
, возвратит Двойное значение. чем ниже это значение, тем более подобны цвета.
Hope это помогает кому-то