小编ffx*_*sam的帖子

如何基于Redux状态更改生成React组件setState()?

我知道答案,但只是为了确保:

我希望this.setState()在Redux状态更改为某个条件(例如state.dataLoaded === true)时调用React组件.我应该以某种方式使用subscribe,或者是太低级别我应该使用connect将状态映射到道具?在这种情况下,我认为这样的事情是可以接受的:

componentWillReceiveProps(nextProps) {
  if (nextProps.dataLoaded) {
    this.setState({
      dataSource: this.state.dataSource.cloneWithRows(nextProps.posts)
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

reactjs redux

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

如何通过扩展从TypeScript接口中删除字段

假设有一个我无法控制的界面:

interface Original {
  name: string;
  size: number;
  link: SomeType;
}
Run Code Online (Sandbox Code Playgroud)

我想扩展这个接口,但实际上删除 link所以我最终得到一个有效的新接口:

interface OriginalLite {
  name: string;
  size: number;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

typescript

8
推荐指数
3
解决办法
2053
查看次数

如何仅在用户身份验证后设置 Apollo 客户端?

我对如何构建我的 React/GraphQL (Apollo) 应用程序感到有点困惑,因为在用户验证/登录之前不应建立连接。

目前我有这个:

class App extends Component {
  render() {
    return (
      <ApolloProvider client={client}>
        <Provider store={store}>
          <Router>
            <div>
              <ul>
                <li><Link to="/">Home</Link></li>
                <li><Link to="/login">Log In</Link></li>
                <li><Link to="/signup">Sign Up</Link></li>
              </ul>
              <AuthenticatedRoute exact path="/" component={HomePage} />
              <Route path="/login" component={LoginPage} />
              <Route path="/signup" component={SignupPage} />
            </div>
          </Router>
        </Provider>
      </ApolloProvider>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

这是网络接口的创建:

const networkInterface = createNetworkInterface({
  uri: process.env.NODE_ENV === 'development'
    ? 'http://localhost:3000/graphql'
    : 'TBD',
});

networkInterface.use([
  {
    applyMiddleware(req, next) {
      if (!req.options.headers) {
        req.options.headers = {}; // Create the header object …
Run Code Online (Sandbox Code Playgroud)

apollo reactjs graphql react-apollo apollo-client

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

如何实际跟踪 S3 上传进度(JavaScript SDK)

我希望能够跟踪 S3 文件上传的进度(上传的字节数占总字节数)。

在任何人将此标记为受骗之前 - 事实并非如此。我在 StackOverflow 上看到的所有其他答案实际上都是不正确的。如果你做这样的事情:

s3
  .putObject(
    {
      Bucket: 'xyz',
      Key: 'wow.png',
      Body: data,
    },
    (err, data) => {
      console.log('done', err, data);
    }
  )
  .on('httpUploadProgress', progress => {
    console.log('Progress:', progress);
  });
Run Code Online (Sandbox Code Playgroud)

您将获得一个进度更新,显示总大小:

Progress { loaded: 1082019, total: 1082019 }
Run Code Online (Sandbox Code Playgroud)

这没有用。我正在寻找的是更细粒度的上传进度报告,就像您在上传过程中通常看到的一样(无论文件大小.. 1MB 或 100MB):

100% 中的 0% 100% 中的
3% 100% 中的
7% 100% 中的
9%
(等等)

javascript amazon-s3 amazon-web-services

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

如何将JSON对象结构转换为点表示法?

我有一个我正在存储的变量,它将决定从查询中排除哪些字段:

excludeFields = {
  Contact: {
    Address: 0,
    Phone: 0
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为可与Mongo一起使用的点符号findOne,例如:

things.findOne({}, {fields: {'Contact.Address': 0, 'Contact.Phone': 0}})
Run Code Online (Sandbox Code Playgroud)

只是传递excludeFields不起作用并导致错误,"投影值应为1,0,true或false之一"

things.findOne({}, {fields: excludeFields})
Run Code Online (Sandbox Code Playgroud)

我是否必须编写自己的函数来从层次结构转换为平点符号?或者是否有一些机制在JavaScript中执行此操作,我不知道?

javascript mongodb

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

为什么我永远不需要在Redux中使用subscribe?

如果,在React中,我可以使用connect映射状态和调度到道具,并且connect当Redux状态(以及因此道具)改变时,我使用的组件将自动渲染,为什么我需要使用subscribe

reactjs redux

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

伪经典继承相对于功能继承(工厂函数)有哪些技术优势?

替代标题:"为什么这么多流行的JavaScript库使用伪经典继承而不是功能继承(工厂函数)?"

JavaScript:Good Parts建议使用工厂功能,以便您获得真正的方法和属性隐私.这是有道理的,所以我想知道为什么这么多现代JS库仍然使用伪造的经典继承(使用new关键字).与工厂功能相比,这条路线有一些技术优势吗?如果没有,它只是一种风格选择吗?

编辑:这不是一个基于意见的帖子.我不是问哪个更好,我问的是伪古典继承有哪些技术优势超过功能,以了解为什么有人会选择那种风格.

编辑2:伪古典的几个优点我可以看到:

  1. 当您console.log是原型的实例时,它会显示它所实例化的对象的名称.
  2. 在相关的说明中,您可以使用instanceof查看实例是否来自特定对象,这是工厂函数无法实现的.

javascript inheritance prototype

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

如果总是需要键,我如何制作稀疏索引?

我对 DynamoDB 中的某些东西感到非常困惑:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForLSI.html#GuidelinesForLSI.SparseIndexes

对于表中的任何项目,如果项目中存在索引排序键值,DynamoDB 只会写入相应的索引条目。如果排序键没有出现在每个表项中,则称该索引为稀疏索引。

[...]

要跟踪未结订单,您可以在 CustomerId(分区键)和 IsOpen(排序键)上创建索引。只有表中定义了 IsOpen 的订单才会出现在索引中。

但是,如果您使用备用排序键定义了 LSI,则在创建新项目时,备用排序键永远不能为空。因此,索引根本不是稀疏的,因为我创建的每个项目都会在索引中结束。

我错过了什么?

indexing amazon-dynamodb

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

AWS CloudFront 签名的 cookie + S3 可在 REST 客户端应用程序中运行,但不能在浏览器中运行

我尽可能详细地提出这个问题,以便遇到相同问题的其他人都将拥有全面的资源来解决这个问题并使其发挥作用。

目标

目标是使用签名 cookie,以便我的应用程序中经过身份验证的用户可以自由访问他们的任何文件,而无需签署 URL。

S3 和 CloudFront 配置

我很确定其中大部分都是正确的,但为了提供完整的图片,我将包括我所拥有的设置。

S3配置

我有一个桶,我们可以打电话my-storage。它具有以下 CORS 配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)

桶策略是:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity xxx"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-storage/*"
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-storage/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": "http://localhost:8080/*"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

本地主机异常只是为了让我可以在本地构建/测试我的应用程序,因为 HTTP cookie 由于跨域问题而无法正常工作。

CloudFront分布

我有一个使用此存储桶作为源的 CloudFront 发行版。在本文中,我们将称 …

cookies httpcookie amazon-web-services cors amazon-cloudfront

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

如何正确更改 iOS 的 Flutter 应用程序名称

我已遵循几乎每个网站上详细说明的说明:

  1. 编辑ios/Runner/Info.plist
  2. 找到该CFBundleName键并将其值更改为应用程序名称。
  3. 跑步flutter clean && dart pub get
  4. 调试/构建

无论我做什么,该应用程序仍然被称为“MyApp Mobile”,而不仅仅是“MyApp”。安卓改名没有问题。为什么这不起作用?

(颤振3.0.5,达特2.17.6)

flutter

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