Я думаю, что решение от Ори Дрори лучше, чем это, но мне кажется, что это то, что вы просите:
const foo = (project, errVal) => pipe (
prop ('state'),
assocPath (["project", "value"], project),
assocPath (["project", "error"], errVal)
)
this .setState (foo (project, false) (this))
foo
(хорошо, так что я ужасен в naming!) принимает ваши значения project
и err
и возвращает функцию, которая принимает объект и возвращает обновленную версию его свойства state
после установки project.value
и project.error
. Это то, что вы хотите сделать?
Терминология
Вы говорите так:
Но проблема в редукторном редукторе, я не могу это сделать , Я должен карри методы один за другим.
И я просто хочу указать на некоторые проблемы с формулировкой. Во-первых, у Рамды нет методов . Методы - это функции, которые воздействуют на состояние объекта. Рамда очень осторожен, чтобы не видоизменить ваше состояние. Рамда вместо этого просто имеет функций . R
(или _
, если вы выберете) служит пространством имен для большого числа независимых функций.
И, во-вторых, то, что вы делаете, не имеет ничего общего с curry, Вы просто вызываете функции. Мой ответ использует pipe
для объединения некоторых функций в новую, и, возможно, это то, что вы имели в виду. Карринг - это процесс преобразования функции с несколькими аргументами во вложенную последовательность функций с одним аргументом. (a, b, c) => 'foo' ===> (a) => (b) => (c) => 'foo'
. В карри Рамды есть некоторые дополнительные функции, которые позволяют вам вызывать полученную функцию несколькими способами, но дело в том, что в вопросе нет ничего общего с карри.