Экранировать двоеточие в имени поля реактивного поиска

Я тестирую очень простую реализацию реактивного поиска.

Мой код выглядит следующим образом: import React, {Component} из 'React'; импортировать {ReactiveBase, DataSearch, ResultCard} из '@appbaseio/reactivesearch'; импортировать логотип из './logo.svg'; импортировать './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>

        <ReactiveBase
            app="indexName"
            url="https://someurl.amazonaws.com"
          >

          <DataSearch
            componentId="SearchSensor"
            dataField={ "field_product:title" }
            autoSuggest={true}
          />    

          <ResultCard
             componentId="results"
             dataField="field_product"
             react={{
               "and": ["SearchSensor"]
             }}
             onData={(res)=>({
               "image": res.image,
               "title": res.field_product:title,
               "description":   res.description
             })}
           />

          </ReactiveBase>
      </div>
    );
  }

}

export default App;

Мои поля в индексе выглядят примерно так:

{
  "_index": "kirana11",
  "_type": "product_autocomplete",
  "_id": "66641",
  "_version": 1,
  "_score": 1,
  "_source": {
    "id": 66641,
    "description": "Some Nestle Product ",
    "field_product:title": "Nestle Product",    
    "field_product:commerce_price:amount": 83
}

В приведенном выше примере, когда я вызываю такие поля, как res.image, все работает безупречно. Однако такие поля, как field_product:title и field_product:commerce_price:amount, возвращают ошибку, как показано ниже:

Синтаксическая ошибка: неожиданный токен, ожидаемый, (34:41)

Как правильно получить доступ к полям с двоеточием? Есть ли способ избежать этого?


person esafwan    schedule 29.05.2018    source источник


Ответы (1)


Заключите его в кавычки и используйте скобки вместо записи через точку для доступа к свойству:

res['field_product:title']

Точно так же вы можете получить доступ к свойству с помощью переменной:

const key = 'field_product:title';
res[key]

Однако может быть лучше изменить структуру json:

fieldProduct: {
  title: '',
  commercePrice: ...
}
person Roy Wang    schedule 29.05.2018
comment
Спасибо, это сработало. Часть индексирования выполняется из другого приложения, которое я не могу контролировать. Следовательно, к сожалению, я ничего не могу сделать со структурой JSON. - person esafwan; 29.05.2018