Объединение переменных и строк в React
Есть ли способ включить в себя фигурное скобку React и тег href
? Скажем, мы имеем следующее значение в состоянии:
{this.state.id}
и следующие атрибуты HTML для тега:
href="#demo1"
id="demo1"
Есть ли способ добавить состояние id
в атрибут HTML, чтобы получить что-то вроде этого:
href={"#demo + {this.state.id}"}
Что даст:
#demo1
Ответы
Ответ 1
Ты почти прав, просто упустил несколько цитат. Обертка всего в обычных кавычках буквально даст вам строку #demo + {this.state.id}
- вам нужно указать, какие переменные и которые являются строковыми литералами. Так как все внутри {}
является встроенным выражением JSX , вы можете сделать:
href={"#demo" + this.state.id}
Это будет использовать строковый литерал #demo
и объединить его в значение this.state.id
. Затем это можно применить ко всем строкам. Рассмотрим это:
var text = "world";
И это:
{"Hello " + text + " Andrew"}
Это даст:
Hello world Andrew
Вы также можете использовать интерполяцию строк ES6/литералы шаблона с помощью` (обратных ссылок) и ${expr}
(интерполированное выражение), которое ближе к что вы пытаетесь сделать:
href={`#demo${this.state.id}`}
В основном это заменит значение this.state.id
, объединив его с #demo
. Это эквивалентно выполнению: "#demo" + this.state.id
.
Ответ 2
лучший способ concat реквизита/переменных:
var sample = "test";
var result = `this is just a ${sample}`;
//this is just a test
Ответ 3
exampleData =
const json1 = [
{id: 1, test: 1},
{id: 2, test: 2},
{id: 3, test: 3},
{id: 4, test: 4},
{id: 5, test: 5}
];
const json2 = [
{id: 3, test: 6},
{id: 4, test: 7},
{id: 5, test: 8},
{id: 6, test: 9},
{id: 7, test: 10}
];
example1 =
const finalData1 = json1.concat(json2).reduce(function (index, obj) {
index[obj.id] = Object.assign({}, obj, index[obj.id]);
return index;
}, []).filter(function (res, obj) {
return obj;
});
example2 =
let hashData = new Map();
json1.concat(json2).forEach(function (obj) {
hashData.set(obj.id, Object.assign(hashData.get(obj.id) || {}, obj))
});
const finalData2 = Array.from(hashData.values());
Я рекомендую второй пример, это быстрее.