小编m_c*_*ens的帖子

使用参数反应 useCallback

使用 React 的useCallbackhook 本质上只是一个useMemo专门用于函数的包装器,以避免在组件的 props 中不断创建新的函数实例。我的问题来自何时需要将争论传递给从备忘录创建的回调。

例如,像这样创建的回调......

const Button: React.FunctionComponent = props => {
    const onClick = React.useCallback(() => alert('Clicked!'), [])
    return <button onClick={onClick}>{props.children}</button>
}
Run Code Online (Sandbox Code Playgroud)

是一个记忆化回调的简单示例,不需要将外部值传递给它来完成其工作。但是,如果我想为React.Dipatch<React.SetStateAction>函数类型创建一个通用的记忆回调,那么它需要参数......例如:

const Button: React.FunctionComponent = props => {
    const [loading, setLoading] = React.useState(false)
    const genericSetLoadingCb = React.useCallback((x: boolean) => () => setLoading(x), [])

    return <button onClick={genericSetLoadingCb(!loading)}>{props.children}</button>
}
Run Code Online (Sandbox Code Playgroud)

在我看来,这似乎与执行以下操作完全相同......

const Button: React.FunctionComponent = props => {
    const [loading, setLoading] = React.useState(false)
    return <button onClick={() => setLoading(!loading)}>{props.children}</button>
}
Run Code Online (Sandbox Code Playgroud)

这会让记忆函数的目的落空,因为它仍然会在每次渲染时创建一个新函数,因为它也会在每次渲染时genericSetLoadingCb(false)返回一个新函数。 …

callback reactjs react-hooks

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

GitHub Actions 检查空调度输入

我有一个由带有一些非必需字符串输入的事件触发的工作流程workflow_dispatch,并且正在尝试找出如何确定是否提供了该值。

on:
  workflow_dispatch:
    inputs:
      input1:
        description: first input
        required: false
        type: string
      input2:
        description: second input
        required: false
        type: string
Run Code Online (Sandbox Code Playgroud)

该文档表示,类型的未设置输入string将等同于工作流程中的空字符串,但是当我在作业的if子句条件中检查该输入时,它似乎没有正确评估。

jobs:
  jobA:
    if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.input1 != '' }}
    # ...
Run Code Online (Sandbox Code Playgroud)

即使当我在输入为空的情况下分派工作流时,这两个步骤都会运行。

如果不是的话,检查输入值是否未设置的惯用方法是什么?

github-actions

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

Go 中的通用函数

我正在学习Go,文档和互动课程说空interface可以容纳任何类型,因为它不需要额外实现的方法。

举个例子:

func describe(i interface{}) {
    fmt.Printf("Type: %T | Value: %v\n", i, i)
}
Run Code Online (Sandbox Code Playgroud)

......会打印出来......

"Type: int | Value: 5" // for i := 5
"Type: string | Value: test" // for i := "test"
... etc
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是这是否Go's是实现通用功能的方式,或者是否有另一种更合适的方式来实现它们。

generics interface go

7
推荐指数
2
解决办法
8652
查看次数

Rust 使用 Reqwest 处理错误响应体

我在 Rust 应用程序中使用reqwest(version 0.10.4) 包进行 HTTP 调用,但找不到任何有关如何处理可能返回多个可能的响应正文(主要用于错误处理)的 API 调用的示例。

例如,API 调用可以使用成功的 JSON 结构或以下格式的错误结构进行响应:

{
    "errors": ["..."]
}
Run Code Online (Sandbox Code Playgroud)

目前我有该函数的代码,但似乎无法弄清楚如何struct根据 HTTP 请求是否成功来确定我需要将响应缓冲区反序列化到哪个缓冲区。

use super::responses::{Error, Response};
use crate::clients::HttpClient;
use crate::errors::HttpError;
use reqwest::header;

pub fn call() -> Result<Response, HttpError> {
    let url = format!("{}/auth/userpass/login/{}", addr, user);
    let response = HttpClient::new()
        .post(&url)
        .header(header::ACCEPT, "application/json")
        .header(header::CONTENT_TYPE, "application/json")
        .json(&serde_json::json!({ "password": pass }))
        .send();

    match response {
        Ok(res) => {
            let payload = res.json(); // could be `Error` or `Response` but only parses …
Run Code Online (Sandbox Code Playgroud)

rust serde-json reqwest

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

Microsoft MVC Preview 4中的OutputCacheFilter是否实际上保存了操作调用?

我们使用预览3(包括严格的压力测试)部署了一个实时,清新,时髦的网站.

页面输出缓存是我们的救星,使我们有能力满足我们的性能合同要求.

我的问题是,动作OutputCacheFilter和页面输出缓存之间有区别吗?

动作输出缓存是否比页面输出缓存更快?

c# asp.net asp.net-mvc outputcache

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

pyautogui:同时按下两个键

我正在使用pyautogui模拟同时按下 shift 和 end - 当我自己输入时,它会突出显示所有条目,但是当我通过下面的代码执行此操作时,它只会移动到最终文件 - 不会突出显示每个组件,所以似乎没有按下 shift 键。想知道是否有人有任何想法?

pyautogui.keyDown('shift')
pyautogui.keyDown('end')
pyautogui.keyUp('end')
pyautogui.keyUp('shift')
Run Code Online (Sandbox Code Playgroud)

python pyautogui

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

将流写入缓冲区对象

我有一个正在从音频源读取的流,我正在尝试将其存储到Buffer. 从我读过的文档来看,您可以使用而不是文件路径将pipe流传输到一个流中。fs.createWriteStream(~buffer~)

我目前正在这样做:

const outputBuffer = Buffer.alloc(150000)
const stream = fs.createWriteStream(outputBuffer)
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它会抛出一个错误,指出Path: must be a string without null bytes文件系统调用。

如果我误解了文档或遗漏了一些明显的内容,请告诉我!

buffer fs node.js node-streams

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

取消引用双指针

我有代码片段,我无法理解它是如何工作的,因为有一行进行了双重取消引用。代码如下所示:

void afunction(int**x){
    *x = malloc(2 * sizeof(int));
    **x = 12;
    *(*x + 1) = 13;
}

int main(){
    int *v = 10;
    afunction(&v);

    printf("%d %d\n", v[0], v[1]);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我知道指向指针的指针的第一个元素的值是 12,但之后的行我似乎无法理解。第一个指针中的第二个元素的值是否为 13?

c

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

UIBezierPath 二次曲线是一条直线

我正在尝试创建一个弯曲的箭头以在 abARKit场景中显示,但是,箭头工作人员的曲率只是在两侧渲染为直线。

func createTurnArrow(_ direction: Direction) -> SCNShape {
    let path = UIBezierPath()
    path.move(to: CGPoint(x: 0.2, y: 0)) // A
    path.addLine(to: CGPoint(x: 0, y: 0.2)) // B
    path.addLine(to: CGPoint(x: 0, y: 0.1)) // C
    path.addQuadCurve(to: CGPoint(x: -0.3, y: -0.3), controlPoint: CGPoint(x: -0.3, y: 0.1)) // Curve 1
    path.addLine(to: CGPoint(x: -0.1, y: -0.3)) // D
    path.addQuadCurve(to: CGPoint(x: 0, y: -0.1), controlPoint: CGPoint(x: -0.1, y: -0.1)) // Curve 2
    path.addLine(to: CGPoint(x: 0, y: -0.2)) // E
    path.close()

    return direction == …
Run Code Online (Sandbox Code Playgroud)

uibezierpath quadratic-curve swift swift4 arkit

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

GitLab CI 从其他存储库读取文件

在我的设置中,GitLab 中有两个存储库,其中一个有一个版本文件,另一个需要命名由其 CI/CD 管道生成的工件。

现在,我只是克隆整个其他存储库来访问该VERSION文件。我尝试使用git archive仅提取VERSION文件,但CI_JOB_TOKEN不适用于 SSH 访问远程(来自我的测试),并且curl对原始文件路径执行 a操作不起作用,因为它位于私有 GitLab 实例上。

有一个更好的方法吗?

gitlab gitlab-ci gitlab-ci-runner

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

在后台线程中保存对象时的RLMException

在后台异步保存对象时,我得到RLMException:'无法添加来自不同Realm的对象'.但是,如果删除异步代码,相同的保存工作正常.

该对象与现有对象有关系.例如:

class Person: Object {
  name: String
  school: School
}

class School: Object {
  name: String
}

let person = new Person()
person.name = "John"
person.school = school // Existing object selected from a dropdown.

DispatchQueue.global().async {
    do {
        let realm = try Realm!

        try realm.write {
            realm.add(person, update: true)
        }

        DispatchQueue.main.async {
            // Success!
        }
    } catch let error as NSError {
        DispatchQueue.main.async {
            // Error!
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码导致崩溃.但是,如果我删除DispatchQueye.global().async,一切正常.我遇到了一些线程问题吗?

注意:该school对象是预先存在的,并从Results<School>集合中选择.

realm swift realm-mobile-platform

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

计划中的汽车和Cdr

所以我一直在学习Scheme for school,并且遇到了使用carcdr对我来说没有意义的系列.

所以给出一个清单: (define x '(1 2 3 4 5))

为什么(caddddr x)(cddddr x)返回(5)(car (cddddr x))返回时向我吐出错误5.

(caddddr x)一样(car (cddddr x))吗?

scheme list

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