小编Ryn*_*yne的帖子

useEffect 中的 debounce 问题

我有一个带有用户名输入的表单,我正在尝试验证用户名是否在去抖动功能中使用。我遇到的问题是,当我输入“user”时,我的去抖动似乎不起作用,我的控制台看起来像

u
us
use
user
Run Code Online (Sandbox Code Playgroud)

这是我的去抖功能

export function debounce(func, wait, immediate) {
    var timeout;

    return () => {
        var context = this, args = arguments;

        var later = () => {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };

        var callNow = immediate && !timeout;

        clearTimeout(timeout);

        timeout = setTimeout(later, wait);

        if (callNow) func.apply(context, args);
    };
};
Run Code Online (Sandbox Code Playgroud)

这是我在 React 组件中调用它的方式

import React, { useEffect } from 'react' 

// verify username
useEffect(() => {
    if(state.username !== "") {
        verify();
    }
}, [state.username]) …
Run Code Online (Sandbox Code Playgroud)

reactjs debounce react-hooks

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

在 React、React-Native 和 Electron 之间共享代码

我正在尝试为在网络、桌面和本机应用程序之间共享代码的所有平台构建一个项目。有谁有使用 React、React-Native、Electron 和 WebPack 设置跨平台代码共享的经验,并且知道一些资源/示例来帮助我开始实现这一目标?

目录结构可能如下所示:

/resources (fonts, images)
/config (webpack config)
/fastlane (android + ios build/deployment)
/android (auto generated by expo or create-react-native-app maybe?)
/ios (auto generated by expo or create-react-native-app maybe?)
/web
/desktop
/src (components, styles, pages, routes, App.js, etc... all shared)
index.js
Run Code Online (Sandbox Code Playgroud)

我计划使用如下脚本运行和构建每个平台:

/package.json

"scripts": {
  "ios": "react-native run-ios",
  "android": "react-native run-android",
  "desktop": "electron .",
  "web": "webpack-dev-server --open",
  "build: "webpack",
  "desktop-build": "electron-builder --config config/electron.config.js",
  "ios-build": "fastlane ios build",
  "android-build": "fastlane android build"
}
Run Code Online (Sandbox Code Playgroud)

设置这个 webpack 配置似乎是最困难的部分。我什至不确定如何初始化这个项目。我对网络使用自定义 webpack …

reactjs webpack react-native electron electron-builder

10
推荐指数
0
解决办法
1090
查看次数

设置 AWSAppSyncClient、Apollo 和 React 的正确方法

我在开始使用 React、Apollo 和 AWS-AppSync 时遇到了问题。我无法解决此错误消息:

TypeError: this.currentObservable.query.getCurrentResult is not a function
Run Code Online (Sandbox Code Playgroud)

我正在使用@apollo/react-hooks 和 aws-appsync 的更新包。

我目前的设置看起来像这样。

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';

import config from './aws-exports';
import AWSAppSyncClient from 'aws-appsync';
import { ApolloProvider } from '@apollo/react-hooks';

const client = new AWSAppSyncClient({
    url: config.aws_appsync_graphqlEndpoint,
    region: config.aws_appsync_region,
    auth: {
        type: config.aws_appsync_authenticationType,
        apiKey: config.aws_appsync_apiKey
    }
});

ReactDOM.render(
    <ApolloProvider client={client}>
        <React.StrictMode>
            <App />
        </React.StrictMode>
    </ApolloProvider>,
    document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

我有一个函数可以进行如下查询:

import React …
Run Code Online (Sandbox Code Playgroud)

graphql react-apollo apollo-client aws-appsync

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

如何修复React Router组件不会随着路由更改而更新

我在我的reactJs应用程序中使用react-router-dom进行路由。我有一个路由,帐户,其中包含嵌套的路由。在“帐户”组件中,我想根据当前路线(param.id)显示不同的组件。现在,初始组件正在呈现,但是当我单击链接时,无论url中的变化如何,我的Account组件仍会呈现该初始组件。如何获取我的帐户组件以更新url的更改。还是我应该在AccountSwitch组件中做一些事情以识别url的更改并更新props.match.params.id的当前值?

// app.js
<Router>
    <Route path="/account" component={Account} />
</Router>

// account.js
class Account extends Component {
    render() {
        return (
            <div>
                <Link to="/account">Messages</Link>
                <Link to="/account/orders">Orders</Link>

                <Route exact path="/account" component={Messages} />
                <Route path="/account/:id" component={AccountSwitch} />
            </div>
        )
    }
}

// accountSwitch.js
const AccountSwitch = props => {
    switch(props.match.params.id) {
        case '':
            return (
                <AccountMessages />
            );
        case 'orders':
            return (
                <AccountOrders />
            )
        default:
            return <span>select a page<span/>
    }
}
Run Code Online (Sandbox Code Playgroud)

react-router-dom

4
推荐指数
2
解决办法
1819
查看次数

.htaccess 名称中存在空格

我正在开发一个用于.htaccess重定向www.example.com/Name到个人资料页面的项目。我让它在单个单词名称上运行良好。问题是,如果名称是“San Francisco”,无论我如何尝试,我都会得到 404。下面是我的.htaccess.

RewriteRule ^([A-Za-z0-9]+)$ viewProfile.php?Name=$1 [L]
Run Code Online (Sandbox Code Playgroud)

我想知道如果我提供 URLwww.example.com/San_Francisco或类似的东西,我是否可以这样做。我阅读了一些与类似主题有关的其他问题,但从未找到可行的解决方案。

(似乎www.example.com/San%20Francisco是最好的,因为当我链接时,这当然是填充 URL 空间的内容)

regex apache .htaccess mod-rewrite url-rewriting

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

使用 Nextjs 和 Vercel 设置 Cookie

我有一个使用 Vercel 部署的 NextJs 应用程序,但未设置 cookie。我进入控制台 > 网络,可以看到请求的状态为 200,并且 set-cookie 值存在且没有任何警告。我检查控制台 > 应用程序 > Cookie,但未找到 cookie。我在 StackOverflow 和 Github 上发现了一些类似的问题,但答案非常有限,似乎并没有促使我找到解决方案。

我的域结构是这样的:

domain.com
api.domain.com
subdomain.domain.com
nextapp.domain.com -> deployed through vercel
Run Code Online (Sandbox Code Playgroud)

域和子域应用程序是通过AWS部署的标准React应用程序,API是一个nodejs(express)应用程序。我对域和子域应用程序设置的 cookie 没有任何问题,因此我相信这是由 Vercel 引起的问题。我的 API 响应如下所示:

res.status(200).cookie('token', token, { httpOnly: true }).json(...) 
Run Code Online (Sandbox Code Playgroud)

设置了这些 cors 选项

app.use(cors({
  origin: true,
  credentials: true
})
Run Code Online (Sandbox Code Playgroud)

我尝试更新以下响应中的 cookie 选项,但都没有效果。

{ httpOnly: true, sameSite: false, secure: true }
{ httpOnly: true, sameSite: 'none', secure: true } 
Run Code Online (Sandbox Code Playgroud)

Vercel 中是否存在我应该注意的遗漏内容?

编辑

看起来这实际上可能是 Next.JS 的问题。我没有在 Next.js 中使用 API 层。我的请求看起来像这样: …

node.js express reactjs next.js vercel

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