小编Hir*_*oki的帖子

React.js:在组件中没有bind()的情况下将参数传递给事件处理程序的最有效方法

当您必须this在事件处理程序中使用关键字时,必须将函数(事件处理程序)与thiskerword绑定.否则,您需要使用箭头功能.

例如

//This function isn't bound whilst using "this" keyword inside of it.
//Still, it works because it uses an arrow function
handleClick = () => {
    this.setState({
      isClicked:true
    });
}

render() {
    return (
      <div className="App">
        <button onClick={this.handleClick}>Click</button>
      </div>
    );
}
Run Code Online (Sandbox Code Playgroud)

但是,使用上述方法,您无法传递参数.你需要使用......

  1. bind(this, param) 功能之后
  2. 匿名箭头功能

<button onClick={this.handleClick}>Click</button>
will be
<button onClick={this.handleClick.bind(this, 111)}>Click</button>
or
<button onClick={() => this.handleClick(111)}>Click</button>
Run Code Online (Sandbox Code Playgroud)

这是个问题.

将参数传递给事件处理程序的最有效方法是什么?

根据官方文档,使用bind()可以破坏性能,因为......

每次组件渲染时,在render中使用Function.prototype.bind都会创建一个新函数

使用匿名箭头功能也是如此.医生说......

在渲染中使用箭头函数会在每次渲染时创建一个新函数

那么,传递参数的最有效方法是什么?

任何输入将不胜感激.

PS

有人问过如何 …

javascript reactjs

14
推荐指数
3
解决办法
3194
查看次数

开玩笑:在运行所有测试之前如何跨文件共享数据库连接?

这是一个例子。

有3个测试文件

test
 - customer.test.ts
 - user.test.ts
 - staff.test.ts
Run Code Online (Sandbox Code Playgroud)

它们每个都需要一个数据库连接(无论您使用什么数据库和 ORM),因此您将在所有测试文件中看到以下行。

describe('staff.test.ts', () => {
  let testDb;

  beforeAll(async () => {
    testDb = await getTestDb(); // This returns a DB connection
  });

  afterEach(async () => {
    await testDb.synchronize(true);
  });

  afterAll(async () => {
    await testDb.close();
  });

  // tests are here
});
Run Code Online (Sandbox Code Playgroud)

在所有的文件中,

  1. testDb总是用相同的函数实例化 ( getTestDb())
  2. beforeAllafterEachafterAll被复制/粘贴。

我怎么能够...

  1. 在所有文件之间共享实例化的数据库连接,
  2. 在运行所有测试之前调用beforeAllandafterAll
  3. 调用afterEach每个测试用例?

似乎globalSetup允许我导出“在所有测试套件之前触发一次的异步函数”。但是,我不仅必须运行beforeAll,而且还必须共享实例化的数据库连接。

可以实现吗?任何建议将被认真考虑!

jestjs

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

从 DBeaver(在 Windows 上)访问 PostgreSQL(在 wsl2 上)失败:“连接被拒绝:连接”

我正在尝试使用 Postgres 并从 DBeaver 访问它。

  • Postgres 安装到 wsl2 (Ubuntu 20)
  • DBeaver 安装到 Windows 10 中

根据此文档,如果您从 Windows 访问在 Linuc 上运行的应用程序,则localhost可以使用。

然而...

在此输入图像描述

连接被拒绝,并显示localhost。另外,我不知道这条消息的含义:Connection refused: connect

有人看到这个的潜在原因吗?任何建议将被认真考虑。

笔记:

  • 密码应该没问题。当我在 wsl2 中使用psql并输入密码时,psql可以使用密码
  • 我在 Windows 端没有 Postgres。它仅存在于 wsl2 上

postgresql wsl-2

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

Redux &amp; React Router:结合调度和导航(history.push)

我对如何将 React Routerhistory.push('/route')Redux.

换句话说,如果你将一个组件与 Redux 的 连接起来,你mapDispatchToProps如何放置history.push('/route')它应该在调度某个动作后被触发?

为了澄清这个问题,这是我的实验片段......

class PostContainer extends React.Component {

    handleSubmit(data) {
        return this.props.addPost(data);
    }

    render() {
        return (<Post onSubmit={data=> this.handleSubmit(data)}/>);
    }
}

const mapDispatchToProps = (dispatch) => {
    return {    
        addPost: (data) => {
            dispatch(addPost(data)).data.then((result) => {
                dispatch(addPostFulfilled(result.data));

                //How do you call the following function?
                this.props.history.push('/posts')
            }).catch((error) => {
                dispatch(addPostRejected());
            });
        },      
    }
}

export default connect(null, mapDispatchToProps)(PostContainer);
Run Code Online (Sandbox Code Playgroud)

如您所见,只要通过 将帖子添加到 Redux 的状态addPostFulfilled,页面就需要/posts通过 history.push移动到。

根据 …

javascript react-router redux react-redux

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

为什么重载ostream的运算符<<需要引用"&"?

我一直在学习C++.

从这个页面,我明白ostream的重载"<<"运算符可以通过这种方式完成.

ostream& operator<<(ostream& out, Objects& obj) {
    //
    return out;
} 
//Implementation
Run Code Online (Sandbox Code Playgroud)

friend ostream& operator<<(ostream& out, Object& obj);
//In the corresponding header file
Run Code Online (Sandbox Code Playgroud)

我的问题是...为什么这个功能需要"和"在结束ostreamObject

至少我知道"&"习惯了......

  1. 取一个值的地址
  2. 声明对类型的引用

但是,我认为它们都不适用于上述的重载.我花了很多时间在Google上搜索和阅读教科书,但我找不到答案.

任何建议将被认真考虑.

c++ operator-overloading

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

如何获取存储在storage/app/中的文件?

storage/app/我一直在尝试按照doc将文件存储到(并从中获取)。

运行后php artisan storage:link,我可以看到有一个指向 puiblic 文件夹的链接。

如果我放置一个包含以下代码的文件...

    Storage::put('/images/blah.png', $file);
Run Code Online (Sandbox Code Playgroud)

...存储将如下所示。

我不太确定该链接是否正常工作,因为blah.png无法检索该链接。

到目前为止,我已经更改了storageby的访问级别chmod -R 755 storage/,并输入了完整的 URL(http://localhost:8000/storage/images/blah.png。这就是asset('storage/images/blah.png')返回的内容)。尽管如此,我还是收到了 404 错误(未找到)。

config/filessystems.php。默认设置为local. (IE 'default' => 'local'

你看出我做错了什么吗?

任何建议将被认真考虑。

聚苯乙烯

这就是公共磁盘的配置的样子......

'public' => [
        'driver'     => 'local',
        'root'       => storage_path('app/public'),
        'url'        => env('APP_URL') . '/storage',
        'visibility' => 'public',
],
 //env('APP_URL').'/storage' returns 'root/storage/app/public'
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5

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

Laravel 5.5:使用DatabaseMigrations进行测试会删除所有表

我一直在教自己如何在Laravel 5.5中编写测试用例.

我注意到,当我运行具有DatabaseMigrations特征的测试类时,运行测试后将删除与测试类相关的所有数据库表.

这是默认发生的吗?我没有在文档中找到任何线索.

任何建议将被认真考虑.

phpunit laravel laravel-5.5

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

Laravel:如何在没有DB的情况下对用户进行身份验证

简而言之,是否可以在没有DB(而是使用User Provider)的情况下进行身份验证?

我见过有关如何在没有密码的情况下进行身份验证的帖子,但是如果没有DB,是否可以进行身份​​验证?

这是我一直在努力实现的目标......

Ask the user to submit a PIN

Compare the PIN with a value within .env

If the PIN is correct, authenticate the user

通过引入用户提供程序,似乎可以在没有传统RDBMS的情况下进行身份验证.

但是,doc似乎没有描述用户提供程序的外观.

这是我的代码的片段(好吧,我只是模仿了文档)...

class AuthServiceProvider extends ServiceProvider {

    public function boot()
    {
        $this->registerPolicies();

        Auth::provider('myUser', function ($app, array $config) {
            // Return an instance of Illuminate\Contracts\Auth\UserProvider...

            return new MyUserProvider($app->make('myUser'));
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

auth.php......

'providers' => [
    'users' => [
        'driver' => 'myUser',
    ],
],
Run Code Online (Sandbox Code Playgroud)

现在,我不知道如何继续. …

php laravel laravel-5 laravel-5.6

6
推荐指数
2
解决办法
5582
查看次数

React js - Laravel 5:在 POST 方法中使用 csrf-token

我已经阅读了一些关于 Laravel 的 CSRF 的问题,但我仍然没有找到如何在 React 中使用它。我的目标是制作一个 POST 表单,在那里我进行 AJAX 调用。

这是我的render( ).

render() {
return (
  <form method="post" action="logpage">
   <input type="hidden" name="csrf-token" value="{{{ csrf_token() }}}" />
   //I'm sure this doesn't have csrf_token.

   <input type="text" name ="word" value={this.state.word || ''}/>
   <button onClick={this.submit} className="btn btn-flat btn-brand waves-attach waves-effect" data-dismiss="modal" type="button">Save</button>
  </form>
  );
}
Run Code Online (Sandbox Code Playgroud)

这是提交功能。

submit(){
fetch('/words', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  },
  body: JSON.stringify({
    //parameters
  })
}).then((response)=>{
  console.log(response);
});
}
Run Code Online (Sandbox Code Playgroud)

我假设问题$('meta[name="csrf-token"]').attr('content')是没有发送,因为没有生成令牌。但是,我不知道如何在 …

javascript laravel reactjs

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

React Hooks 和 Enzyme:React 不断告诉我将状态更新包装在 act(...) 中,即使我认为是这样

我一直在自学如何使用enzyme和测试 React 组件jest,但我对如何测试使用 React hooks 的已安装组件一无所知。

这是该组件的简化版本......

  const [records, setRecords] = useState([]);

  const onChange = async ({ value }) => {
    try {
      const request = await searchRecords();

      console.log("Before setRecords");

      setRecords(request.results);

      console.log("After setRecords");
    } catch (error) {  /* error handling */ }
  }

Run Code Online (Sandbox Code Playgroud)

测试代码看起来像...

let wrapped;

describe("Sample", () => {
  beforeEach(() => {
    jest.clearAllMocks();
    wrapped = mount(
      <Provider store={createStore(reducers, {})}>
        <Sample />
      </Provider>
    );
    api.mockImplementation(() => ({ results: searchResult }));
  });

  afterEach(() => { …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs react-dom enzyme react-hooks

5
推荐指数
0
解决办法
2185
查看次数