小编HMR*_*HMR的帖子

使用闭包编译器进行类型检查不是隐式的?

我正在编译文件并获得编译代码,但注释似乎完全被忽略了; 没有警告没有错误.使用calcdeps.py使用以下命令编译我的代码:

set calc="D:\software\closure compiler\library\closure\bin\calcdeps.py"
c:\Python27\python.exe %calc% ^
--path D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\ ^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\mmt\Mediator.js ^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\mmt\DomDependent.js ^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\mmt\WorkFlow.js ^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\mmt\Messenger.js ^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\mmt\data.js ^
--compiler_jar "D:\software\closure compiler\compiler.jar" ^
--output_mode compiled ^
--compiler_flags="--compilation_level=ADVANCED_OPTIMIZATIONS" ^
--compiler_flags="--formatting=PRETTY_PRINT" ^
--output_file D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\main.js
pause
Run Code Online (Sandbox Code Playgroud)

例如在Messenger.js中我有一个函数:

/**
 * Replaces words in matches with a yes/no/all box
 * @param {Array} matches contains the items of myApp.data that matched words in text
 * @param {string} text contains the cleaned up user input (no html)
 */
myApp.Messenger.builtReplacewithOptions=function(matches,text){
Run Code Online (Sandbox Code Playgroud)

变量matches必须是一个Array,所有调用此函数的代码都使用Array调用它.要测试类型检查,我将Array更改为字符串,如下所示: …

javascript strong-typing google-closure-compiler

5
推荐指数
1
解决办法
1254
查看次数

在contenteditable ="true"div中锁定元素

我有一个用于用户输入的contenteditable div,当点击一个按钮时,它显示替换某些单词的选项.首先,它剥离所有html并创建可以替换单词的span元素.这些词的标记是不同的,我面临一些问题.

  1. 在跨度之前或之后直接单击并键入文本时,文本将具有与跨度相同的标记.在仅具有跨度的行上添加单词非常困难.我想通过填充跨度来解决这个问题, 但它看起来有点奇怪.
  2. 用户可以单击跨度并更改它,我希望用户单击跨度并在更改之前选择替换或忽略选项.换句话说,它需要被锁定.我想通过capturig keyup来做这件事,如果它来自一个跨度然后是e.preventDefault(),但编程它有点痛苦.

所以我的问题是:

是否有一种简单的方法可以将一个span元素锁定在一个contenteditable中,不涉及捕获key和preventDefault(尚未尝试过,甚至不确定它是否可行)?

当单击或直接移动光标旁边的光标并键入文本时,它将成为跨度的一部分,有没有办法让它成为跨度的一部分?填充跨度 可能有效,但当跨度是该行的第一个单词时,它看起来很奇怪.为了说明这一点,我在下面发布了一个示例html文件:

<!DOCTYPE html>
<html>
 <head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Example</title>
</head>
 <body>
   <div contenteditable="true"></div>
   <script type="text/javascript">
    document.getElementsByTagName("div")[0]
      .innerHTML="<span style='color:green'>hello</span>"
   </script>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

html javascript html5 dom

5
推荐指数
1
解决办法
1518
查看次数

异步/等待不等待 Promise 解决

看来我对 的使用await不像我理解的那样表现。

我认为async函数和await关键字可以用于返回承诺的调用(例如navigator.mediaDevices.getUserMedia),它会暂停函数执行(如生成器函数),直到承诺解决,然后它会继续执行该函数。

即使我正在等待电话,它也会立即返回,并且我的控制台日志发生故障。具体来说,以“reducer”开头的控制台日志出现在以“getter”开头的控制台之前,此时它应该是相反的/与(我认为)堆栈跟踪应该如何运行相反。

谁能告诉我这里发生了什么?

异步辅助函数 getter:

const getLocalStream = async () => {
  try {
    const localStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
    console.log('getter localStream', localStream);
    console.log('about to return')
    return localStream;
  }
  catch (err) {
    console.error(err);
  }
}

export default getLocalStream;
Run Code Online (Sandbox Code Playgroud)

减速机/存储:

import getLocalStream from './getLocalStream';

const reducer = (state = {}, action) => {
  switch (action.type) {
    case 'SEND_CALL': {
      const { id } = action;
      const localStream …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous reactjs redux

5
推荐指数
1
解决办法
3462
查看次数

React 自定义钩子和 useMemo 钩子

我有两个“昂贵”的函数,我想在我的反应应用程序中记住它们,因为它们需要很长时间才能渲染。昂贵的函数用在数组映射中。我想记住数组映射的每个结果,这样如果数组的一个元素发生更改,只有该元素的昂贵函数将被重新计算。(并且要独立地记住昂贵的函数,因为有时只需要重新计算一个函数。)我正在努力解决如何记住并传递当前数组值的问题。

这是工作演示,没有记忆:

import React, { useMemo, useState } from "react";

const input = ["apple", "banana", "cherry", "durian", "elderberry", "apple"];

export default function App() {
  const output = input.map((msg, key) => createItem(msg, key));
  return <div className="App">{output}</div>;
}

const createItem = (message, key) => {   // expensive function 1
  console.log("in createItem:", key, message);

  return (
    <div key={key}>
      <strong>{"Message " + (1 + key)}: </strong>
      {message} =>{" "}
      <span
        id={"preview-" + key}
        dangerouslySetInnerHTML={{ __html: msgSub(message) }}
      />
    </div>
  );
};

const msgSub = …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks react-usememo

5
推荐指数
1
解决办法
2万
查看次数

为什么 useSelector 里面的选择器会运行两次?

为什么 useSelector 里面的选择器会运行两次?

例子

const selector = (state) => {
  console.log("invoke Selector");

  return state;
};

function App() {
  console.log("render App");

  const count = useSelector(selector);
  const dispatch = useDispatch();
  return (
    <div className="App">
      <button onClick={() => dispatch({ type: "INCREMENT" })}>Increment</button>
      <button onClick={() => dispatch({ type: "DECREMENT" })}>Decrement</button>
      <p>{count}</p>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这是一个工作片段,显示每次 Child 安装时选择器回调运行两次:

const selector = (state) => {
  console.log("invoke Selector");

  return state;
};

function App() {
  console.log("render App");

  const count = useSelector(selector);
  const dispatch = useDispatch();
  return (
    <div …
Run Code Online (Sandbox Code Playgroud)

javascript render reactjs redux react-hooks

5
推荐指数
1
解决办法
279
查看次数

如何使用在控制器中返回虚假存储库的mock entitymanager?

在我的测试中,我正在尝试模拟实体管理器,因此它将返回一个不会连接到数据库但是返回假值的存储库:

在根据此文档的测试中:

  $session = new Session(new MockArraySessionStorage());
  $mockManager = $this
        ->getMockBuilder('\Doctrine\Common\Persistence\ObjectManager')
        ->disableOriginalConstructor()
        ->getMock();
  $mockManager->expects($this->any())
        ->method('getRepository')
        ->will($this->returnValue(new userRepo()));      
  $client = static::createClient();
  $container = $client->getContainer();
  $container->set('session', $session);
  $container->set('doctrine.orm.entity_manager',$mockManager);
  $client->request('POST', '/secured/login'
      ,array('userName'=>'username','password'=>'password'
      ,'rememberMe'=>'on'));
  $response = $client->getResponse();
  //....
Run Code Online (Sandbox Code Playgroud)

在测试中,userRepo:

class userRepo {
  public function isValidUser($userName, $password) {
    echo "this is isvaliduser";
    return $this->getFullUserById(22);
  }
  public function getFullUserById($id){
    echo "this is getfulluserbyid";
    return ["name"=>"someName"];
  }
}
Run Code Online (Sandbox Code Playgroud)

在控制器中:

  public function loginAction(Request $request) {
    $userRepo = $this->getDoctrine()->getManager()
        ->getRepository('mytestBundle:User');
    $user=$userRepo->isValidUser($userName,$password);
    $response = new Response();
    //... other …
Run Code Online (Sandbox Code Playgroud)

phpunit doctrine mocking entitymanager symfony

4
推荐指数
1
解决办法
2336
查看次数

eslint vscode 插件不会为 hooks 生成警告

我创建了一个反应应用程序并npx create-react-app my-app进行了纱线安装。在 App.js 中添加了以下内容:

const a = () => 1,
  b = () => 2,
  c = () => 3;

function App() {
  const wut = useMemo(() => {
    return { a: a(), b: b(), c: c() };
  }, [a]);
  useEffect(() => {
    console.log(a(), b(), c());
  }, [a]);
Run Code Online (Sandbox Code Playgroud)

Yarn start 会给我警告,但 vscode 不会。

我添加.eslintrc.js了以下内容:

module.exports = {
  env: {
    browser: true,
    es6: true
  },
  extends: ["eslint:recommended", "plugin:react/recommended"],
  globals: {
    Atomics: "readonly",
    SharedArrayBuffer: "readonly"
  },
  parserOptions: …
Run Code Online (Sandbox Code Playgroud)

reactjs eslint visual-studio-code create-react-app

4
推荐指数
1
解决办法
7397
查看次数

vscode格式不格式化

为 vscode安装了漂亮的插件,并有一个 .pretteirrc.js:

module.exports = {
  trailingComma: 'es5',
  tabWidth: 2,
  semi: true,
  singleQuote: true,
  printWidth: 60,
}
Run Code Online (Sandbox Code Playgroud)

在设置中,默认格式化程序设置为:esbenp.prettier-vscode 并检查保存时的格式,但保存时没有格式化任何内容,也没有给出任何错误的指示。

右键单击具有以下内容的 js 文件:

var test = [1, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, …
Run Code Online (Sandbox Code Playgroud)

javascript visual-studio-code vscode-settings prettier

4
推荐指数
1
解决办法
4904
查看次数

Cypress chrome 不在调试器语句处暂停

我在测试中有以下代码:

it('shows correct language', () => {
  cy.visit('/product/my product');
  cy.changeLanguage('English');
  cy.get('[data-test=attribute-name]').should(
    (elements) => {
      console.log('this shows in console', elements);
      alert('But it wont break!!!!!!!!!!');//this alert shows
      debugger;//never breaks here
    },
  );
});
Run Code Online (Sandbox Code Playgroud)

启动 cypress./node_modules/.bin/cypress open然后我在 cypress 窗口中运行测试,该窗口打开 chrome,然后我手动打开开发工具(不知道如何告诉 cypress 在打开 devtools 的情况下打开 chrome)。

它在控制台中显示消息并显示警报,但实际上从未中断。在sources选项卡中,未设置“停用断点”,因此断点处于活动状态。

手动设置断点然后单击“运行所有测试”按钮后,第一次运行会在手动设置的断点处暂停但忽略该debugger语句。

javascript cypress

4
推荐指数
1
解决办法
3403
查看次数

为dev,prod和测试环境加载bundle特定值

文档提到Symfony/app/config/config_dev.yml了开发环境.

我已经捆绑了特定的配置文件 Symfony/src/mmt/mrBundle/DependencyInjection/mmtmrExtension.php

例如:Symfony/src/mmt/mrBundle/Resources/config/services.yml需要加载mmtmrExtension.phprouting.yml在同一目录中却没有.

是否有我必须遵循的命名惯例?那么我该如何Symfony/src/mmt/mrBundle/Resources/config/services_dev.yml根据环境加载mmtmrExtension.php呢?我见过的唯一例子就是硬编码加载services.yml蚂蚁就是它.

services.yml我有一些代码,如:

mmt.mr.DefaultController:
     class: mmt\mrBundle\Controller\DefaultController
     arguments: [@data_provider]
     calls: 
         - [ "setContainer", [ @service_container ] ]
Run Code Online (Sandbox Code Playgroud)

也许我应该根据环境加载不同的服务?我想要另一个@data_provider用过.

似乎有数百种方法可以做到这一点,但这些方法都没有被文档100%覆盖.我宁愿有一种方法,但有100%的文档覆盖率.

也许有人可以指出配置文件如何工作的正确位置."书"并没有涵盖太多,烹饪书只提到了与"我如何"相关的部分.

感谢您阅读本文,希望您能提供帮助.

symfony

3
推荐指数
1
解决办法
1990
查看次数