Как использовать вложенные структуры данных, возвращаемые из Redux, не сталкиваясь с ошибками, такими как «не может получить доступ к свойству x of undefined»? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь использовать селекторы Redux для извлечения определенных данных из вложенных структур данных, возвращаемых из хранилища Redux.

const getContactPhone = state => (state.home.data.blocks[1].contactPhone);

Я получаю эти данные из API и сохраняю их в магазине, когда мой сайт Next.js загружается с использованием getInitialProps.Кажется, что данные хранилища появляются и исчезают - возможно, это как-то связано с тем, как Next.js и next-redux-wrapper обрабатывают хранилище.В любом случае, я продолжал получать ошибки «не могу прочитать contactPhone of undefined», например.

Очевидно, я могу поставить чеки, такие как

const getContactPhone = state => (state && state.home && state.home.data 
 && state.home.data.blocks && state.home.data.blocks[1] ? state.home.data.blocks[1].contactPhone : '');

Но это кажется неловким и безобразным.Есть ли лучший способ справиться с этим?Есть ли какая-нибудь библиотека, которая поможет мне?

Спасибо за любые подсказки на пути вперед!

1 Ответ

0 голосов
/ 31 января 2019

Рамда имеет функцию path.Вы передаете путь к свойству как массив строк.Если свойство существует, его значение возвращается;в противном случае возвращается undefined.

console.log(R.path(['a', 'b', 'c', 0], { a: { b: { c: [1, 2] } } })); // 1
console.log(R.path(['a', 'b', 'c', 0], {})); // undefined
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
...