我想编写一个函数,其规范在下面的代码段中描述,这是我目前的实现。确实有效。但是,我已经尝试了一段时间,将其写为毫无意义,并且完全是ramda函数的组合,无法找到解决方案。问题obj => map(key => recordSpec[key](obj[key])与之联系在一起,因此我无法以无意义的方式编写整件事。
我该怎么办?
/**
* check that an object :
* - does not have any extra properties than the expected ones (strictness)
* - that its properties follow the defined specs
* Note that if a property is optional, the spec must include that case
* @param {Object.<String, Predicate>} recordSpec
* @returns {Predicate}
* @throws when recordSpec is not an object
*/
function isStrictRecordOf(recordSpec) {
return allPass([
// 1. no extra properties, i.e. all …
我学习了 Svelte 教程,并component bindings使用状态机重写了部分中的小键盘。那很好用。
现在我想将Machine.svelte文件解压缩到一个npm包中,但我不知道该怎么做。我找不到任何有关发布的文档。对于我从svelte-virtual-list看到的,我可能必须配置我的mainorsvelte字段package.json:
{
"name": "@sveltejs/svelte-virtual-list",
"version": "3.0.0",
"description": "A <VirtualList> component for Svelte apps",
"main": "VirtualList.svelte",
"svelte": "VirtualList.svelte",
"scripts": {
"build": "rollup -c",
"dev": "rollup -cw",
"prepublishOnly": "npm test",
"test": "node test/runner.js",
"test:browser": "npm run build && serve test/public",
"pretest": "npm run build",
"lint": "eslint src/VirtualList.svelte"
},
"devDependencies": {
"eslint": "^5.12.1",
"eslint-plugin-svelte3": "git+https://github.com/sveltejs/eslint-plugin-svelte3.git",
"port-authority": "^1.0.5",
"puppeteer": "^1.9.0",
"rollup": "^1.1.2",
"rollup-plugin-commonjs": "^9.2.0", …Run Code Online (Sandbox Code Playgroud) 我有一个带有输入字段的表单。当我键入 (keyup)Enter键时,必须清除这些字段之一。我知道我可以将此字段作为受控字段处理(意味着监听keyup并维护该字段的副本),或者使用双向绑定,但在我的用例中我不能做后者,我宁愿不做前者。因此,我的问题是,如何强制渲染 Svelte 组件?
通常,表单显示为<Component field="value" />,用户修改字段并单击Enter键,我想app.set(field, value)字段重置为value,即使在 Svelte 看来,该field属性没有改变。那可能吗?
我尝试不成功的转变在于更新Svelte 组件内的属性,希望当 时app.set(field, value),Svelte 将看到该field属性的两个不同值并更新组件。但这似乎不起作用:
<script>
const watchForEnter = ev => {
if (ev.keyCode === 13) {
ev.preventDefault();
const formData = new FormData(ev.target.closest("form"));
const tag = formData.get("tag");
dispatch({ [ADDED_TAG]: tag });
}
};
const updateCurrentTag = ev => {
currentTag = new FormData(ev.target.closest("form")).get("tag");
console.log(`currentTag!`, currentTag)
}
</script>
<form>
<fieldset class="form-group"> …Run Code Online (Sandbox Code Playgroud) 我有一个由效果调用的昂贵计算.我现在想要确保,此计算永远不会同时调用,即如果在第一次调用仍在运行时第二次调用它,则应忽略第二次调用.
我解决这个问题的方法是创建2个动作:calculate和setLoading.
@Effect()
calculate$ = this.updates$
.whenAction(CALCULATE)
.flatMap(data => {
console.debug('LOADING', data.state.loading);
if (!data.state.loading) {
this.store.dispatch(Actions.setLoading(true));
await DO_THE_EXPENSIVE_CALCULATION();
this.store.dispatch(Actions.setLoading(false));
}
});
Run Code Online (Sandbox Code Playgroud)
使用Actions.setLoading显然设置state.loading.但是,如果我连续开始计算2次:
store.dispatch(Actions.calculate());
store.dispatch(Actions.calculate());
Run Code Online (Sandbox Code Playgroud)
输出是
LOADING false
LOADING false
Run Code Online (Sandbox Code Playgroud)
因此,昂贵的计算执行两次.我怎么能阻止这个?
我有以下节点代码
//index.js
var username = process.argv[2],
password = process.argv[3],
factories = require('./factories')(username, password);
factories.subscribe(function(data){
console.log(data.length);
});
factories.refresh();
//factories.js
var Rx = require('rx');
var factories = function(username, password){
var factories = [];
var source = Rx.Observable.from(factories);
var baseUrl = "<url>",
factoriesOpt = {
'uri': baseUrl+"<path>",
'method': 'GET',
'auth': {
'user': username,
'pass': password
}
},
response="",
request = require('request');
var refresh = function(){
request(factoriesOpt)
.on('data', function(chunk){
if(chunk)
response += chunk;
})
.on('end', function(){
factories = JSON.parse(response);
})
}
return {
subscribe …Run Code Online (Sandbox Code Playgroud) 我尝试使用 RxJS 来模拟一些游戏。但我发现循环依赖存在一些问题。因此,我将游戏简化为简单的模拟(我只留下了“移动”动作)。你可以在下面找到代码(我省略了一些部分,你可以在这里找到repo)
const rx = require('rx')
const math = require('mathjs')
const _ = require('underscore')
const FIELD_SIZE = 10
const ctx = require('axel');
let getInitialState = () => {
return {
size: FIELD_SIZE,
people: [
{ x: 0, y: 0 },
{ x: 9, y: 9 },
{ x: 5, y: 5 }
]
}
}
var drawWorld = ({size, people}) => {
// draw world logic
}
let getMove = (index)=> {
let [xOffset, yOffset] = [[0,1], …Run Code Online (Sandbox Code Playgroud)