小编Har*_*lue的帖子

React Router v4 baseName和自定义历史记录

我想为我的路由分配一个基本名称,我可以使用BrowserRouter.

但是,我还想指定自定义历史记录,以便以编程方式导航我的用户.我可以用路由器做什么.

但是,我无法做到.是否有可能扩展其中一个路由器以支持此功能或将其包围函数来添加它?

我目前的设置是这个 -

import React from 'react';
import { Router, Switch, Route, Redirect } from 'react-router-dom';

import createHistory from './history';

import Navigation from './components/navigation/Navigation';

import PrivateRoute from './components/private-route/PrivateRoute';

import Home from './containers/home/Home';
import PageTwo from './components/pageTwo/PageTwo';
import Callback from './components/callback/Callback';
import Login from './components/login/Login';

export default () => (
  <Router history={createHistory}>
    <div>
      <Navigation />
      <Switch>
        <Route path="/callback" component={Callback} />
        <Route path="/login" component={Login} />
        <PrivateRoute path="/" exact component={Home} />
        <PrivateRoute path="/page-two" component={PageTwo} />
        <Redirect to="/" />
      </Switch>
    </div>
  </Router> …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-redux

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

取消异步/等待网络请求

我有一个网络层,当前使用完成处理程序来传递操作完成的结果。

由于我支持多个 iOS 版本,因此我在应用程序内扩展网络层以提供对合并的支持。我想将其扩展到现在也支持异步/等待,但我很难理解如何以允许我取消请求的方式实现这一点。

基本实现如下所示;


protocol HTTPClientTask {
    func cancel()
}

protocol HTTPClient {
    typealias Result = Swift.Result<(data: Data, response: HTTPURLResponse), Error>
    @discardableResult
    func dispatch(_ request: URLRequest, completion: @escaping (Result) -> Void) -> HTTPClientTask
}

final class URLSessionHTTPClient: HTTPClient {
    
    private let session: URLSession
    
    init(session: URLSession) {
        self.session = session
    }
    
    func dispatch(_ request: URLRequest, completion: @escaping (HTTPClient.Result) -> Void) -> HTTPClientTask {
        let task = session.dataTask(with: request) { data, response, error in
            completion(Result {
                if let error = error …
Run Code Online (Sandbox Code Playgroud)

ios async-await swift urlsession

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

在Jest/Enzyme中模拟基本名称

我有一个历史课,看起来像:

import createHistory from 'history/createBrowserHistory';

export default createHistory({
  basename: '/admin/',
});
Run Code Online (Sandbox Code Playgroud)

当针对连接到商店并使用路由器呈现的类编写/运行任何单元测试时,我在测试中收到以下警告:

console.error node_modules/warning/warning.js:51
  Warning: You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "blank" to begin with "/admin".
Run Code Online (Sandbox Code Playgroud)

示例测试如下:

import React from 'react';
import { MemoryRouter as Router } from 'react-router-dom';
import { mount } from 'enzyme';
import configureStore from 'redux-mock-store';
import TenantListContainer from '../../../src/containers/TenantList';
import TenantList from '../../../src/containers/TenantList/TenantList';

const mockStore = configureStore();
const store = mockStore({ …
Run Code Online (Sandbox Code Playgroud)

unit-testing reactjs jestjs enzyme

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

Jasmine单元测试 - 无法读取未定义的属性管道

我使用的是Angular 6,NgRx 6,RxJS 6.

我有一个看起来像这样的护卫员 -

import { CanActivate, ActivatedRouteSnapshot } from '@angular/router';
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { IAppState } from '../../../app.state';
import { Store } from '@ngrx/store';

import { SetTenant } from './../../../store/config/config.actions';

@Injectable()
export default class TenantGuard implements CanActivate {
  constructor(private store: Store<IAppState>) {}

  canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
    const tenant = route.params['tenant'];

    if (!tenant) {
      return of(false);
    }

    this.store.dispatch(new SetTenant(tenant));
    return of(true);
  }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我正在通过tenant商店将我添加到商店this.store.dispatch(new …

jasmine rxjs ngrx angular

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

将整个目录从容器复制到主机

我正在尝试将整个目录从我的docker映像复制到本地计算机.

图像是一个keycloak图像,我想复制主题文件夹,以便我可以处理自定义主题.

我正在运行以下命令 -

docker cp 143v73628670f:keycloak/themes ~/Development/Code/Git/keycloak-recognition-login-branding
Run Code Online (Sandbox Code Playgroud)

但是我收到以下回复 -

Error response from daemon: Could not find the file keycloak/themes in container 143v73628670f
Run Code Online (Sandbox Code Playgroud)

当我使用 - 连接到我的容器时 -

 docker exec -t -i 143v73628670f /bin/bash
Run Code Online (Sandbox Code Playgroud)

我可以使用 - 导航到主题 -

cd keycloak/themes/
Run Code Online (Sandbox Code Playgroud)

我可以看到它位于那里,文件在终端中是预期的.

我在Mac上本地运行实例.

如何将整个主题文件夹复制到本地计算机?我做错了什么?

docker keycloak docker-copy

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

Angular 6/NGRX组合减速器

我正在使用Angular 6 w/NgRX 4.我有多个我想要结合的减速器.

app.module.ts

  import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';

    import { StoreModule } from '@ngrx/store';
    import { EffectsModule } from '@ngrx/effects';

    import { StoreDevtoolsModule } from '@ngrx/store-devtools';

    import { AppComponent } from './app.component';
    import counterEffects from './store/counter/counter.effects';

    import reducers from './store/reducers';

    @NgModule({
      declarations: [AppComponent],
      imports: [
        BrowserModule,
        StoreModule.forRoot(reducers),
        EffectsModule.forRoot([counterEffects]),
        StoreDevtoolsModule.instrument({
          maxAge: 10,
        }),
      ],
      providers: [],
      bootstrap: [AppComponent],
    })
    export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

reducers.ts

import { combineReducers } from '@ngrx/store';
import { …
Run Code Online (Sandbox Code Playgroud)

redux ngrx angular

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

ngrx 测试方法调度动作

我有一个包含方法的服务,调用时将调度一个动作

export default class AuthService {
  constructor(private store: Store<IAppState>, private jwtService: JWTService) {}

  public isSessionValid = (id_token?: string, access_token?: string): Observable<boolean> => {
    const hasValidSession: boolean = this.jwtService.isTokenValid(id_token);

    if (!hasValidSession) {
      this.invalidateSession();
      return of(false);
    }

    this.setupValidSession(id_token, access_token);
    return of(true);
  }

  public invalidateSession = (): void => {
    this.store.dispatch(new InvalidSession());
  }

  public setupValidSession = (id_token?: string, access_token?: string): void => {
    this.store.dispatch(new ValidSession());

    if (id_token && access_token) {
      this.store.dispatch(
        new PersistSessionTokens({
          [ID_TOKEN_STORAGE_KEY]: id_token,
          [ACCESS_TOKEN_STORAGE_KEY]: access_token,
        })
      );
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想在我的测试中断言,如果 …

unit-testing jasmine angular

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

TypeScript接口字符串属性的默认值

我有一个看起来像这样的界面

export interface IAppSection {
  key: string;
  order: number;
  header: string;
  content: string;
  modifiedAt: string;
  modifiedByEmployeeId: number;
  change: 'added' | 'removed' | 'updated' | 'none';
}
Run Code Online (Sandbox Code Playgroud)

我想做的是在存储与该接口相关的对象时使用change默认值none

我已经尝试过了,change: 'added' | 'removed' | 'updated' | 'none' = 'none'但这不起作用。

我敢肯定,我在这里做错了什么,对于我如何实现这一目标,我将不胜感激。

typescript

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

SwiftUI 中的导航协调器

从历史上看,UIKit我们一直使用协调器模式来处理导航。

启动一个新的应用程序,SwiftUI但不清楚如何处理这个问题。

例如,我们当前的流程是:

  1. 应用程序启动
  2. 应用协调器启动
  3. 加载“开始场景”
  4. 开始场景检查身份验证状态并调用 App Coordinator 上的委托
  5. 应用协调器启动showHomeSceneshowAuthScene

就像是

final class AppCoordinator: BaseCoordinator {

  private(set) var navigationController: UINavigationController?

  init(navigationController: UINavigationController?) {
    self.navigationController = navigationController
  }

  override func start() {
    showStartScene()
  }

  private func showStartScene() {
    let configurator = StartConfigurator()
    let viewController = configurator.create(self)
    navigationController?.setViewControllers([viewController], animated: false)
  }

  private func showHomeScene() {
    let coordinator = HomeCoordinator(self, navigationController: navigationController)
    store(coordinator: coordinator)
    coordinator.start()
  }

  private func showAuthScene() {
    let coordinator = …
Run Code Online (Sandbox Code Playgroud)

navigation ios swift coordinator-pattern swiftui

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

如何在受基于标头的身份验证保护的 SwiftUI 中显示图像

我已经使用了AsyncImage一段时间在 SwiftUI 应用程序中渲染远程图像。

https://developer.apple.com/documentation/swiftui/asyncimage

我现在需要渲染受保护资产的图像 - 我必须在标头中提供不记名令牌才能下载这些图像。

很明显,这AsyncImage不适合这里的工作,因为无论如何都无法自定义请求。

我有一个ImageLoader协议;

protocol ImageLoader {
    func loadImage(for url: URL) async throws -> UIImage
}
Run Code Online (Sandbox Code Playgroud)

其中描述了我编写的用于下载远程图像的服务。

如何向视图层次结构中嵌套多个级别的视图提供此服务。

例如;

struct UserAvatarView: View {
    
    private let name: String
    private let initials: String
    private let image: UIImage?
    
    init(name: String, initials: String, image: UIImage?) {
        self.name = name
        self.initials = initials
        self.image = image
    }
    
    var body: some View {
        GeometryReader { proxy in
            ZStack {
                if let image = image { …
Run Code Online (Sandbox Code Playgroud)

dependencies dependency-injection image swiftui

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