小编Col*_*rdo的帖子

使用react-hooks在更新状态时执行异步代码

我有类似的东西:

const [loading, setLoading] = useState(false);

...

setLoading(true);
doSomething(); // <--- when here, loading is still false. 
Run Code Online (Sandbox Code Playgroud)

设置状态仍然是异步的,那么等待此setLoading()调用完成的最佳方法是什么?

setLoading()似乎并没有接受一个回调像setState()使用.

一个例子

基于类的

getNextPage = () => {
    // This will scroll back to the top, and also trigger the prefetch for the next page on the way up.
    goToTop();

    if (this.state.pagesSeen.includes(this.state.page + 1)) {
      return this.setState({
        page: this.state.page + 1,
      });
    }

    if (this.state.prefetchedOrders) {
      const allOrders = this.state.orders.concat(this.state.prefetchedOrders);
      return this.setState({
        orders: allOrders,
        page: this.state.page …
Run Code Online (Sandbox Code Playgroud)

javascript callback reactjs react-hooks

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

为BigQuery Python CLI设置GOOGLE_APPLICATION_CREDENTIALS

我正在尝试使用Python通过BigQuery API连接到Google BigQuery.

我在此处关注此页:https: //cloud.google.com/bigquery/bigquery-api-quickstart

我的代码如下:

import os
import argparse

from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.client import GoogleCredentials

GOOGLE_APPLICATION_CREDENTIALS = './Peepl-cb1dac99bdc0.json'

def main(project_id):
    # Grab the application's default credentials from the environment.
    credentials = GoogleCredentials.get_application_default()
    print(credentials)
    # Construct the service object for interacting with the BigQuery API.
    bigquery_service = build('bigquery', 'v2', credentials=credentials)

    try:
        query_request = bigquery_service.jobs()
        query_data = {
            'query': (
                'SELECT TOP(corpus, 10) as title, '
                'COUNT(*) as unique_words '
                'FROM [publicdata:samples.shakespeare];')
        } …
Run Code Online (Sandbox Code Playgroud)

python google-bigquery

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

创建React App:使用index.html中的环境变量

是否有办法注入的环境变量,例如REACT_APP_MY_APIindex.html文件?

根据这个,它可以做到,但我似乎无法让它工作.

.ENV

REACT_APP_MY_API=https://something.com
Run Code Online (Sandbox Code Playgroud)

的index.html

<script type="text/javascript">
  console.log("%REACT_APP_MY_API%") // undefined 
  console.log("%NODE_ENV%") // development
</script>
Run Code Online (Sandbox Code Playgroud)

reactjs create-react-app

11
推荐指数
3
解决办法
4577
查看次数

反应路由器组件安装两次

我有以下几点:

const RoutedApp = ({ signedIn }) => {
  return (
    <BrowserRouter>
      <Switch>
        <Route path={routes.HANDLE_SIGN_IN} render={props => <HandleSignIn {...props} />} />
        <PublicRoute exact path={routes.LANDING} signedIn={signedIn} component={LandingContainer} />
        <PrivateRoute exact path={routes.HOME} signedIn={signedIn} component={HomeContainer} />
        <Route component={PageNotFoundContainer} />
      </Switch>
    </BrowserRouter>
  );
};
Run Code Online (Sandbox Code Playgroud)

问题出在HandleSignInContainer.

该组件基本上只是让用户登录并将他们发送到主页location.push('/home')

但是,我遇到了HandleSignInContainer安装两次的问题。

文档提到,在使用Routerender道具应该可以解决这个问题,但后来这个SO答案中提到,这将不是由HOC创建的组件工作。

既然HandleSignIn是用 React Redux's 包裹的connect(),我怎样才能阻止这个组件挂载两次?

更新 1

尝试包装非连接组件:

const WrappedHandleSignInContainer = props => (
  <div>
    <HandleSignInContainer {...props} />
  </div>
);
Run Code Online (Sandbox Code Playgroud)

更新 …

reactjs react-router

6
推荐指数
0
解决办法
2330
查看次数

正确渲染图像 Blob

我正在尝试<img>从 blob渲染一个。

import React from 'react';
import { getImageBlob } from '../api/images';

class ImageViewer extends React.Component {
   state = {
     src: undefined,
     loading: true,
   }

  componentDidMount() {
    getImageBlob()
      .then((imageBlob) => {
        console.log(imageBlob);
        const urlCreator = window.URL || window.webkitURL;
        const imageUrl = urlCreator.createObjectURL(imageBlob);
        console.log(imageUrl);
        this.setState({ src: imageUrl, loading: false });
      })
      .catch((err) => {
        console.error(err);
        this.setState({ loading: false });
      });
  }

  render() {
    if (this.state.loading) {
      return 'loading';
    }

    return <img src={this.state.src} height={100} width={100} />;
  }
}


export default …
Run Code Online (Sandbox Code Playgroud)

html javascript node.js reactjs

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

自定义使用效果第二个参数

新的React API包括useEffect(),其第二个参数采用Object哪个React差异来查看组件是否已更新。

例如

useEffect(
  () => {
    const subscription = props.source.subscribe();
    return () => {
      subscription.unsubscribe();
    };
  },
  [props.source],
);
Run Code Online (Sandbox Code Playgroud)

[props.source]论点在哪里。

我的问题是:我可以定义一个自定义函数来运行以检查道具是否已更改吗?

我有一个自定义对象,React似乎无法告诉它何时已更改。

javascript reactjs

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

找不到用于 CircleCI 构建的 ESLint

我正在尝试在 CircleCI 上为 Node.js 应用程序运行一个简单的构建:

配置文件

version: 2.0
jobs:
  build:
    working_directory: ~/app
    docker:
      - image: gcr.io/google-appengine/nodejs
    steps:
      - checkout
      - restore_cache:
          key: dependency-cache-{{ checksum "package.json" }}
      - run:
          name: Install dependencies
          command: yarn
      - save_cache:
          key: dependency-cache-{{ checksum "package.json" }}
          paths:
            - ./node_modules
              - checkout
      - restore_cache:
          key: dependency-cache-{{ checksum "package.json" }}
      - run:
          name: ESLint
          command: yarn lint
Run Code Online (Sandbox Code Playgroud)

包.json

...
"scripts": { 
  "lint": "./node_modules/eslint/bin/eslint.js . --ext .js --fix",
}
...
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

#!/bin/bash -eo pipefail
yarn lint
yarn run v1.16.0 …
Run Code Online (Sandbox Code Playgroud)

javascript node.js circleci

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

Snackbar通过MaterialUI在对话框上

我将React与Material UI库一起使用,并且具有以下组件层次结构:

<RootContainer>
  <SnackBar />
  <HomeContainer>
    <LoginModal />
  </HomeContainer>
</RootContainer>
Run Code Online (Sandbox Code Playgroud)

我的问题是,即使Snackbar的zIndex增加到,它也会显示在LoginModal的下面9999

在此处输入图片说明

将Snackbar 放置在模态(或更确切地说,模态的背景)上的正确方法是什么?

reactjs material-ui

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

保留选项卡视图页面之间的状态

问题

我有ListViews一个TabBarView使用a的两个渲染TabController.

如何在每个之间保留状态(缺少更好的单词),ListView以便:1)小部件不重建,2)ListView在标签之间记住位置.

相关代码

class AppState extends State<App> with SingleTickerProviderStateMixin {
  TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = new TabController(
      vsync: this,
      length: _allPages.length,
    );
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  Widget _buildScaffold(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('headlines'),
        bottom: new TabBar(
            controller: _tabController,
            isScrollable: true,
            tabs: _allPages
                .map((_Page page) => new Tab(text: page.country))
                .toList()),
      ),
      body: new TabBarView(
          controller: _tabController, …
Run Code Online (Sandbox Code Playgroud)

dart flutter

5
推荐指数
3
解决办法
5554
查看次数

Next.js 从 Docker 容器无限重载

我正在尝试制作一个简单的 Next.js 应用程序,它使用 Firebase 身份验证并从 Docker 容器运行。

以下在本地工作正常(从构建的 docker 容器运行)。但是,当我部署到 Heroku 或 Google Cloud Run 并访问该网站时,它会导致无限重新加载循环(页面只是冻结并最终耗尽内存。当作为来自 Google 的 Node.js 应用程序提供时,它工作正常应用引擎。

我认为错误出在 Dockerfile 中(我认为我的端口有问题)。Heroku 和 Google Cloud Run 随机化他们的process.env.PORT环境变量,如果有任何用处,并且EXPOSE据我所知忽略 Docker 的命令。

重新加载发生时,网络/控制台中不会显示任何错误。我认为这是由于 Next.js 8 的热模块重新加载造成的,但问题在 Next.js 7 上仍然存在。

相关文件如下。

文件

FROM node:10

WORKDIR /usr/src/app

COPY package*.json ./
RUN yarn

# Copy source files.
COPY . .

# Build app.
RUN yarn build

# Run app.
CMD [ "yarn", "start" ]
Run Code Online (Sandbox Code Playgroud)

服务器.js

require(`dotenv`).config();

const express = require(`express`);
const …
Run Code Online (Sandbox Code Playgroud)

javascript node.js docker reactjs

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