2

我想要的是XHR.perform使用 CalmmJS 和 React 触发 onMouseClick - 我正在尝试以下代码,不必要的部分已编辑:

const getResults = someArg => XHR.perform({
    timeout: 60 * 1000,
    responseType: 'json',
    method: 'POST',
    url: U.string`/api/${ facet }/end-point/`,
    body: U.stringify( someArg )
});
...
<SomeElement
    ...
    onMouseClick={ U.ifElse(
            shouldMakeXHR, /* Atom that runs its own debounced XHR checks, then
                              runs it through an R.equals to see if the result
                              is acceptable - result is either true or false */
            _ => getResults( someArg ),
            R.identity //as no-op
    ) }
/>

目前我只是试图触发网络请求,而不是对结果做任何事情。相反,XHR.perform只是被吞没了。我究竟做错了什么?

PS:请有人用 karet 或 karet.util 标记我的帖子,因为我无法创建标签。谢谢你的帮助!

4

1 回答 1

0

这是另一个基本的,我出于某种原因一直在努力。

答案是不使用常规函数,而是利用karet.util库和流U.doPush的值U.bus()。CalmmJS官方文档实际上为您指出了一个非常清晰和简单的示例来演示此行为 U.doSet一个常规的值U.atom()虽然我开始认为必须有更好的方法......如果我找到它会更新这个答案。

有一个更好的方法!直接来自 Vesa Karvonen/@polytypic 本人:

const requestsBus = U.bus()

const xhrProperty = XHR.perform(U.toProperty(requestsBus)) 

<button
  onClick={U.doPush(requestsBus, {
        timeout: 60 * 1000,
        responseType: 'json',
        method: 'POST',
        url: U.string`/api/${ facet }/end-point/`,
        body: U.stringify( someArg )
})}>
  Request!
</button>

这是原始的几乎可以工作的代码,供后代使用 - 不要使用此行下方的代码 - 见上文

const mouseClick = U.atom( false );
const makeRequest = someArg => XHR.perform({
timeout: 60 * 1000,
responseType: 'json',
method: 'POST',
url: U.string`/api/${ facet }/end-point/`,
body: U.stringify( someArg )
});
const getResponse = U.when( mouseClick,
    XHR.responseFull( makeRequest( someArg ) );
...
<p>{ U.stringify( getResponse ) }</p>
<SomeElement
...
    onClick={ U.ifElse(
        shouldMakeXHR, /* Atom that runs its own debounced XHR checks, then
                          runs it through an R.equals to see if the result
                          is acceptable - result is either true or false */
        U.doPush( mouseClick, true ),
        R.identity //as no-op
) }
/>

请注意,只要在第一次鼠标单击后 someArg 发生变化,这将继续发出 XHR 发布请求。

于 2018-06-29T07:24:47.170 回答