我想为我的路由分配一个基本名称,我可以使用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) 我有一个网络层,当前使用完成处理程序来传递操作完成的结果。
由于我支持多个 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) 我有一个历史课,看起来像:
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) 我使用的是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 …
我正在尝试将整个目录从我的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上本地运行实例.
如何将整个主题文件夹复制到本地计算机?我做错了什么?
我正在使用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) 我有一个包含方法的服务,调用时将调度一个动作
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)
我想在我的测试中断言,如果 …
我有一个看起来像这样的界面
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'但这不起作用。
我敢肯定,我在这里做错了什么,对于我如何实现这一目标,我将不胜感激。
从历史上看,UIKit我们一直使用协调器模式来处理导航。
启动一个新的应用程序,SwiftUI但不清楚如何处理这个问题。
例如,我们当前的流程是:
showHomeScene或showAuthScene就像是
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) 我已经使用了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) angular ×3
ios ×2
jasmine ×2
ngrx ×2
reactjs ×2
swift ×2
swiftui ×2
unit-testing ×2
async-await ×1
dependencies ×1
docker ×1
docker-copy ×1
enzyme ×1
image ×1
jestjs ×1
keycloak ×1
navigation ×1
react-redux ×1
react-router ×1
redux ×1
rxjs ×1
typescript ×1
urlsession ×1