我想显示来自我的 API 的错误消息,问题是如果我检查,我无法到达该错误response.ok,它返回 Fetch 错误,而不是来自 API 的错误。
如果我不使用if(response.ok)...它,它会从 API 返回错误,但它会调度成功操作。
这是示例,登录操作:
export const signIn = data => dispatch => {
dispatch({
type: SIGN_IN
})
fetch(API_URL+'/login', {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify(data),
})
.then( response => {
if (!response.ok) { throw response }
return response.json() //we only get here if there is no error
})
.then( json => {
dispatch({
type: SIGN_IN_SUCCESS, payload: json
}),
localStorage.setItem("token", 'Bearer '+json.token)
localStorage.setItem("user", JSON.stringify(json.user))
})
.catch( err …Run Code Online (Sandbox Code Playgroud)我知道这个问题的两个解决方案,第一个是将消息保持在你看不好的状态,第二个是订阅ActionSubject我当前用来显示消息的消息.
还有其他解决方案吗?另外如何在模板中设置CSS类,而不是在组件中?
这是我的例子:
this.actionSubject.subscribe(action => {
if (action.type === fromActions.LOGIN_SUCCESS) {
this.message$ = action.payload.message;
this.messageClass = 'alert alert-success';
}
if (action.type === fromActions.LOGIN_FAILURE) {
this.message$ = action.payload.error.message;
this.messageClass = 'alert alert-danger';
this.LoginForm.reset();
}
})Run Code Online (Sandbox Code Playgroud)
这似乎太长了,而不是DRY,我应该在我期望收到消息的每个组件中都这样做.
我刚开始使用 React,一直停留在编辑表单上。我需要预填充输入,但也需要能够编辑它。如果我把 defaultValue,我不能把值放在输入元素上。此时我可以输入输入,但我必须编辑两个字段(表单有两个字段)才能保存两个值。我该怎么做?
示例:我有食谱名称和成分,我用编辑表单打开模态,它是预填充的,我添加了一些成分但保持名称不变。它节省了:
{name: "", ingredients: ing1,ing2,newIngredient}
Run Code Online (Sandbox Code Playgroud)
{name: "", ingredients: ing1,ing2,newIngredient}
Run Code Online (Sandbox Code Playgroud)
我一直都遇到这个错误:
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'project' of com/android/tools/idea/avdmanager/AccelerationErrorNotificationPanel.<init> must not be null
at com.android.tools.idea.avdmanager.AccelerationErrorNotificationPanel.$$$reportNull$$$0(AccelerationErrorNotificationPanel.java)
at com.android.tools.idea.avdmanager.AccelerationErrorNotificationPanel.<init>(AccelerationErrorNotificationPanel.java)
at com.android.tools.idea.avdmanager.AvdDisplayList.refreshErrorCheck(AvdDisplayList.java:517)
at com.android.tools.idea.avdmanager.AvdDisplayList.refreshAvds(AvdDisplayList.java:218)
at com.android.tools.idea.avdmanager.AvdDisplayList.<init>(AvdDisplayList.java:175)
at com.android.tools.idea.avdmanager.AvdListDialog.<init>(AvdListDialog.java:43)
at org.jetbrains.android.actions.RunAndroidAvdManagerAction.openAvdManager(RunAndroidAvdManagerAction.java:55)
at org.jetbrains.android.actions.RunAndroidAvdManagerAction.actionPerformed(RunAndroidAvdManagerAction.java:48)
at com.intellij.openapi.wm.impl.welcomeScreen.FlatWelcomeFrame$FlatWelcomeScreen$IconsFreeActionGroup$1.actionPerformed(FlatWelcomeFrame.java:742)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:255)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:272)
at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:203)
at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:191)
at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:185)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:195)
at com.intellij.ui.popup.AbstractPopup.lambda$dispose$8(AbstractPopup.java:1417)
at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:3094)
at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:189)
at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:138)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:190)
at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1411)
at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:160)
at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:307)
at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:289)
at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:48)
at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:44)
at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:138)
at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:107)
at com.intellij.openapi.util.objectTree.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:182)
at com.intellij.openapi.util.objectTree.ObjectNode.execute(ObjectNode.java:107)
at com.intellij.openapi.util.objectTree.ObjectTree.executeAll(ObjectTree.java:151)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:129)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:125)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试向我的应用程序添加一些测试,但是当我安装react-testing-libraryand 时jest-dom,我编写了这个测试, test ifcomponentDidMount被调用:
import { render } from "react-testing-library";
import { QuestionContainer } from "../containers/QuestionContainer";
it("should call componentDidMount", () => {
const cDM = jest.spyOn(QuestionContainer.prototype, "componentDidMount");
render(QuestionContainer);
expect(cDM).toHaveBeenCalled(1);
});
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
Cannot find module 'react' from 'index.js'
However, Jest was able to find:
'../containers/QuestionContainer.js'
You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['web.js', 'js', 'web.ts', 'ts', 'web.tsx', 'tsx', 'json', 'web.jsx', 'jsx', 'node'].
Run Code Online (Sandbox Code Playgroud)
我不认为文件扩展名有问题..
正如标题所说,我想显示头像但它有 uploads\\img.jpg路径,例如当您从数据库获取用户信息时,如何在应用程序的前端部分显示它?
以下是用户数据:
{
username: 'm',
name: 'm',
email: 'mmerko@gmail.com',
id: '5b64247eb03a573b2818f3c4',
avatar: 'uploads\\img-1533289594220.jpg'
}
Run Code Online (Sandbox Code Playgroud) 我需要向 API 发送一个 put 请求,ngrx/effect但该请求需要 id 和内容,以便 MongoDB 能够找到帖子。
这是代码,我尝试设置两个操作有效负载:
export class UpdatePost implements Action {
readonly type = UPDATE_POST
constructor(public payload: string & Post ) { }
}Run Code Online (Sandbox Code Playgroud)
这是效果:
@Effect()
editPost$: Observable<Action> = this.actions$
.ofType(PostActions.UPDATE_POST)
.map((action: PostActions.UpdatePost) => action.payload)
.switchMap((?) => {
return this.postService.editPost(id, post);
})
.map(editedpost => ({type: PostActions.UPDATE_POST_SUCCESS, payload: editedpost}))
}Run Code Online (Sandbox Code Playgroud)
editPost()需要两个参数:id 和 content。
我想我的操作有效负载应该以其他方式设置,我是新手,ngrx所以欢迎提出建议。
我正在尝试为 Vue 应用程序创建一个导航栏,我正在使用 Vuetify,在大屏幕上有工具栏,在小屏幕上有打开导航抽屉的汉堡包图标。
它可以工作,但是抽屉前面有一个覆盖层,我无法更改页面。
这是代码:
<template>
<div>
<v-app-bar dark>
<v-app-bar-nav-icon class="hidden-md-and-up" @click="sidebar = !sidebar"></v-app-bar-nav-icon>
<v-navigation-drawer v-model="sidebar" app>
<v-list>
<v-list-item v-for="(item, i) in menuItems" exact :key="i" :to="item.path">{{item.title}}</v-list-item>
</v-list>
</v-navigation-drawer>
<v-toolbar-title>Jobify</v-toolbar-title>
<v-spacer></v-spacer>
<v-toolbar-items class="hidden-sm-and-down">
<v-btn text v-for="item in menuItems" :key="item.title">
<router-link :to="item.path">{{item.title}}</router-link>
</v-btn>
</v-toolbar-items>
</v-app-bar>
</div>
</template>
<script>
export default {
data: function() {
return {
sidebar: false,
menuItems: [
{ path: "/jobs", name: "jobs", title: "Jobs" },
{ path: "/companies", name: "companies", title: "Companies" },
{ path: "/jobs/new", name: "new-job", …Run Code Online (Sandbox Code Playgroud) javascript ×6
reactjs ×4
angular ×2
ngrx ×2
android ×1
emulation ×1
fetch ×1
forms ×1
image ×1
jsx ×1
mongodb ×1
multer ×1
ngrx-effects ×1
ngrx-store ×1
node.js ×1
react-native ×1
testing ×1
upload ×1
vue.js ×1
vuejs2 ×1
vuetify.js ×1