Почему это не работает с перекомпоновать и ramda? - PullRequest
0 голосов
/ 05 сентября 2018

В моем случае у меня есть это условие;

   branch(R.propSatisfies(R.isEmpty, "repos"), renderComponent(Loader)),
// branch(R.isEmpty("repos"), renderComponent(Loader)),

В чем разница, и почему socond тот дает мне ошибку? test is not a function

Тот же результат с этим:

branch(R.isEmpty(R.props("repos")), renderComponent(Loader)),

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

R. IsEmpty - унарная функция, которая сообщает, является ли значение пустым значением для его типа (например, пустая строка, пустой объект или пустой массив.). Когда вы вызываете его с помощью "repos", вы получите false, поскольку "repos" не является пустой строкой. Предположительно, вызываемая вами функция branch хочет использовать функцию предиката в качестве первого аргумента, и она не работает, когда вы отправляете это логическое значение. Точно так же, поскольку R. props (вы, вероятно, имели в виду R.prop BTW, но применима та же проблема) - это двоичная функция, R.props("repos") возвращает функцию, которая не является пустой, поэтому isEmpty возвращает false.

R.propSatisfies, с другой стороны, является троичной функцией, принимающей функцию предиката, имя свойства и объект. Когда вы вызываете его с помощью isEmpty и "repos", вы получаете функцию, ожидающую объект. Это передается на branch и все хорошо.

Есть ли причина, по которой вам не нравится версия propSatisfies?

0 голосов
/ 05 сентября 2018

Это потому, что R.propSatisfies имеет сигнатуру метода, отличную от R.isEmpty.

В случае вашего первого подхода:

branch(R.propSatisfies(R.isEmpty, "repos"), renderComponent(Loader))

функция R.propSatisfies оценивает функцию (R.isEmpty) по свойству ("repos") входного объекта (т. Е. Объекта, возвращаемого из renderComponent(Loader)).

В случае вашего второго подхода:

// branch(R.isEmpty("repos"), renderComponent(Loader)),

то, что вы здесь делаете, называется R.isEmpty напрямую. Метод R.isEmpty ожидает массив и возвращает true, если предоставленный массив пуст. R.isEmpty не имеет возможности определить, является ли свойство (т. Е. «Репо») в объекте пустым или нет. Чтобы было проще визуализировать происходящее, рассмотрите следующее:

// Your second approach:
branch(R.isEmpty("repos"), renderComponent(Loader))

// ...which when expanded, is equivalent to this. You can now see it 
// shows incorrect usage of R.isEmpty
branch(component => R.isEmpty("repos")(component), renderComponent(Loader))

Надеюсь, что это дает некоторые пояснения - для получения дополнительной информации о R.isEmpty, см. Эту ссылку

...