2016-05-11 2 views
1

Итак, код, который у меня есть в настоящее время, работает, но я получаю ошибку ESLINT prefer-template: Unexpected string concatenation, чего я бы хотел избежать, возможно, зная правильный способ сделать это с помощью строк шаблона литералы.Template string literal внутри другого шаблона string literal

Вот код, у меня сейчас:

<div className={`${styles.dataGridHeader} ${styles['columns' + this.props.data.headers.length]}`}> 

Я хочу, чтобы применить класс column1, column2, column3, etc, в зависимости от числа столбцов в отчете данных, так что я могу применить некоторые специфические стилизация этих элементов.

У меня есть работы, но есть ли способ избежать использования конкатенации и использовать только литералы шаблонов шаблонов?

Например:

<div className={`${styles.dataGridHeader} ${styles[`columns${this.props.data.headers.length}`]}`}> 

Супер некрасиво, и не работает, хотелось бы более элегантное решение.

+2

я не уверен, как это ведет себя в JSX, но в общий, хотя и не красивый, вложенные шаблонные строки должны работать. – nils

+0

Возможно, это особенно относится к JSX, но кажется, что без использования дополнительной переменной обратные тики в выражении прекращаются друг с другом? –

+0

Можете ли вы уточнить, что «это не работает»? Что именно не работает? Вы получили сообщение об ошибке? [Это отлично работает в Babel REPL] (https://babeljs.io/repl/#?evaluate=false&lineWrap=false&presets=es2015%2Creact&experimental=false&loose=false&spec=false&code=%3Cdiv%20className%3D%7B%60% 24% 7Bstyles.dataGridHeader% 7D% 20% 24% 7Bstyles% 5B% 60columns% 24% 7Bthis.props.data.headers.length% 7D% 60% 5D% 7D% 60% 7D% 20% 2F% 3E & площадка = истина) , –

ответ

1

Как об этом

const nColumn = 'columns' + this.props.data.headers.length 
<div className={`${styles.dataGridHeader} ${styles[nColumn]}`}> 

FYI есть огромная библиотека называется classnames, которая применяется к коду, он выглядит что-то вроде этого

import classNames from 'classnames' 
const nColumn = 'columns' + this.props.data.headers.length 
const divCls = classNames({ 
    [`${styles.dataGridHeader}`]: true, 
    [`${styles[nColumn]}`]: true 
}) 
<div className={divCls} /> 
+0

Я рассмотрю имена классов, но вы ответ был прав, очевидно, '$ {}' связывает любое количество переменных, доступных ему внутри фигурных скобок, желая, чтобы был элегантный способ сделать это inline без использования дополнительной переменной. –

+0

@StevenBennett: Код, который у вас хорошо выглядит. Пожалуйста, уточните, что «это не работает». –