小编jon*_*nes的帖子

在create-react-app中有条件地导入资产

使用create-react-app创建React应用时可以有条件地导入资产吗?我知道require语法-例如:

import React from "react";


const path = process.env.REACT_APP_TYPE === "app_1" ? "app_1" : "app_2";

const imagePath = require(`./assets/${path}/main.png`);

export default function Test() {
  return (
      <img src={imagePath} alt="" />
  );
}
Run Code Online (Sandbox Code Playgroud)

但是,无论如何,这都会捆绑我的所有资产。

它将加载正确的映像,但仍将所有文件捆绑在一起,形成最终版本。

当我查看最终构建的开发工具时,即使我只想为加载资产,也可以看到那里的所有资产app_1

我是否被迫触摸webpack配置,如果是的话,我应该改变什么?还是有另一种方法?

javascript reactjs webpack es6-modules create-react-app

11
推荐指数
2
解决办法
1036
查看次数

Jest - 模拟和测试 node.js 文件系统

我创建了一个函数,它基本上循环遍历数组并创建文件。我开始使用 Jest 进行测试,以确保一切正常,但我在尝试模拟 Node.js 文件系统时遇到了一些问题。

这是我想测试的函数 - function.ts

export function generateFiles(root: string) {
  fs.mkdirSync(path.join(root, '.vscode'));
  files.forEach((file) => {
    fs.writeFileSync(
      path.join(root, file.path, file.name),
      fs.readFileSync(path.join(__dirname, 'files', file.path, file.name), 'utf-8')
    );
  });
}

const files = [
  { name: 'tslint.json', path: '' },
  { name: 'tsconfig.json', path: '' },
  { name: 'extensions.json', path: '.vscode' },
];
Run Code Online (Sandbox Code Playgroud)

我一直在阅读周围的内容,但无法真正弄清楚如何用笑话来测试它。没有例子可看。我尝试安装mock-fs这应该是使用模拟版本的 Node.js FS 模块启动和运行的简单方法,但老实说我不知道​​从哪里开始。这是我第一次尝试进行简单的测试 - 这会导致错误,提示“没有这样的文件或目录” - function.test.ts

import fs from 'fs';
import mockfs from 'mock-fs';

beforeEach(() => {
  mockfs({
    'test.ts': '',
    dir: …
Run Code Online (Sandbox Code Playgroud)

mocking fs node.js typescript jestjs

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

如何从Httpclient.SendAsync调用获取和打印响应

我正在尝试从HTTP请求中获取响应,但是我似乎无法。我尝试了以下方法:

public Form1() {     

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("someUrl");
    string content = "someJsonString";
    HttpRequestMessage sendRequest = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress);
    sendRequest.Content = new StringContent(content,
                                            Encoding.UTF8,
                                            "application/json");
Run Code Online (Sandbox Code Playgroud)

发送消息:

    ...
    client.SendAsync(sendRequest).ContinueWith(responseTask =>
    {
        Console.WriteLine("Response: {0}", responseTask.Result);
    });
} // end public Form1()
Run Code Online (Sandbox Code Playgroud)

使用此代码,我可以获取状态代码和一些标头信息,但无法获取响应本身。我也尝试过:

  HttpResponseMessage response = await client.SendAsync(sendRequest);
Run Code Online (Sandbox Code Playgroud)

但是我被告知要创建一个如下所示的异步方法来使其工作

private async Task<string> send(HttpClient client, HttpRequestMessage msg)
{
    HttpResponseMessage response = await client.SendAsync(msg);
    string rep = await response.Content.ReadAsStringAsync();
}
Run Code Online (Sandbox Code Playgroud)

这是发送“ HttpRequest”,获取并打印响应的首选方式吗?我不确定哪种方法是正确的。

c# asynchronous httpclient

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

将事件加载到FullCalendar

到目前为止,我一直在进行同步ajax调用以从数据库中获取事件,然后使用从ajax返回的变量初始化日历(解决方案1).

我已经读过,做同步调用通常被认为是坏的,因为它冻结了浏览器,所以我尝试了另一个选项,将ajax调用直接放在FullCalendar日历初始化的事件数组中(解决方案2).这在第一次加载时提供了很好的体验,因为浏览器由于异步ajax而未被锁定,您可以在构建时看到日历.

然而,这有一个缺点,每次更改视图时,它会重新呈现事件,使用户与第一个相比,体验不那么顺畅.以下是我到目前为止尝试的两个解决方案的代码:

解决方案1:

$(document).ready(function(){
     $.ajax({
         url: 'script.php',
         type: 'POST',
         async: false,
         success: function(response){
              json_events = response;

         }
    });
  $('#calendar').fullCalendar({
       events: JSON.parse(JSON.stringify(json_events)),
  });

});
Run Code Online (Sandbox Code Playgroud)

解决方案2:

 $(document).ready(function(){
       $('#calendar').fullCalendar({

            events: {
                    url: 'script.php',
                    type: 'POST',
                    success : function(response){
                    }
           }
       });

  });
Run Code Online (Sandbox Code Playgroud)

这个"问题"还有其他解决方案吗?是的,我不喜欢解决方案1,因为您在使用日历时不必处理事件的重新呈现,但是在加载页面时没有初始冻结会很好.

编辑: script.php

$events = array();
$query = mysqli_query($link, "SELECT * FROM calendar");
while($fetch = mysqli_fetch_array($query,MYSQLI_ASSOC)) {
   $e = array();
   $e['id'] = $fetch['id'];
   $e['start'] = $fetch['startdate'];
   $e['end'] = $fetch['enddate'];
   array_push($events, $e);
}
echo json_encode($events);
Run Code Online (Sandbox Code Playgroud)

这会有用吗?(对于评论中的戴森)

  events: …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery json fullcalendar

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