我想知道什么是实现此目标的正确方法?有人可以建议我的解决方案是否正确吗?
所以:
这是正确的方法吗?或有东西 这是由Android完成的,而我正在做一些多余的操作。
谢谢
我已根据此答案设置状态管理器以跟踪用户登录状态:根据登录状态更改导航栏
但是,我想把它带到下一步,不仅根据状态更新导航栏,而且还有主模板本身.我已经得到了这个大部分工作,所以当你点击登录按钮时它会显示'欢迎你现在登录的消息.' 但是,如果您注销并尝试再次登录,它只会显示一个空白屏幕,就好像它没有正确地重新呈现索引路径一样.这是我的问题的JSFiddle.注意当您单击登录/注销然后第二次登录时会发生什么.不显示"欢迎"消息.
这是我的索引模板:
{{render navbar}}
{{authState}}
{{#if isAuthenticated}}
{{outlet}}
{{else}}
{{render login}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)
我可以看到'authState'是正确的,但第二次登录时没有呈现'outlet'...
这是完整的jsfiddle:
http://jsfiddle.net/Benmonro/HmJyu/1/
澄清
@ham要求澄清,所以这里是:
我在这里要完成的主要事情是,当状态管理器改变状态时,isAuthenticated当前呈现的内容{{outlet}}应该被换出来呈现的{{render login}}内容可能真的是任何模板.重点是{{outlet}}将显示和隐藏状态变化......
有人可以告诉我,ViewData和ViewBag是否也是asp.net mvc状态管理的一部分?谢谢
自从我开始阅读SPA以来,最困扰我的是如何处理应用程序状态。
尽管我在Redux中找到了我一直在寻找的大多数答案,但仍有一些我不确定如何处理的事情。
其中之一是如何指定我要在我的应用程序中使用的“实体”的形状。在过去使用的其他框架中,为此目的我已经看到了ES2015类的广泛使用,但是到目前为止,在React / Redux应用程序中,对象常量是表达应用程序状态的首选方式。昨晚,我在阅读有关在redux文档中规范化数据的内容,尽管它为我提供了有关如何处理深层嵌套对象的好主意,但让我感到缺少某些东西,并且需要在一个单独的地方指定它找到并尽可能清楚地知道应用程序状态的结构/形状。
取得上述文章中使用的样本数据:
{
posts : {
byId : {
"post1" : {
id : "post1",
author : "user1",
body : "......",
comments : ["comment1", "comment2"]
},
"post2" : {
id : "post2",
author : "user2",
body : "......",
comments : ["comment3", "comment4", "comment5"]
}
}
allIds : ["post1", "post2"]
},
comments : {
byId : {
"comment1" : {
id : "comment1",
author : "user2",
comment : ".....",
},
"comment2" : {
id : …Run Code Online (Sandbox Code Playgroud) 我在 Blazor 应用程序的一个 razor 组件中使用 Fluxor 进行状态管理,但我不太确定如何设置它以使用 Moq 进行测试。我不能只为学生赋值,因为它只是一个 init 属性。有没有特定的方法来设置 Fluxor 进行测试?
代码
var teacherService = new Mock<ITeacherService>();
var localStorage = new Mock<ILocalStorageService>();
var studentService = new Mock<IStudentService>();
var toastService = new Mock<IToastService>();
var NavigationManager = new Mock<NavigationManager>();
var Dispatcher = new Mock<IDispatcher>();
var actionSubscriber = new Mock<IActionSubscriber>();
var StudentsState = new Mock<IState<StudentsState>>();
var TeacherState = new Mock<IState<TeacherState>>();
// Help here
StudentsState.Setup(t => t.Value.Students = )
Run Code Online (Sandbox Code Playgroud) 我正在使用 flutter Riverpod(State Notifier Provider)进行状态管理。当我更新状态时,消费者小部件不会重建自身,因此即使我的状态正在更新,UI 也不会更新。我无法调试原因。
flutter_riverpod: ^0.14.0+3
Run Code Online (Sandbox Code Playgroud)
final dataListModelProvider=StateNotifierProvider((ref)=>ExampleProvider ([]));
Run Code Online (Sandbox Code Playgroud)
class ExampleProvider extends StateNotifier<List<Example>>{
ExampleProvider (List<Example> state):super(state ?? []);
void createExample(Map exampleData) async{
try{
var response= await ExampleDao().createExampleData(exampleData); // API request - working fine( All the data is coming back from API as expected)
print(" ===== CREATED EXAMPLE TYPE===========");
Example example=response;
List<Example> listExampleData= [...state,example];
print("========== INITIAL STATE =============Count = ${state.length}");
print(state);
state=listExampleData;
print("========== UPDATED STATE =============Count = ${state.length}");
print(state);
}
}catch(error,stackTrace){
print(error);
print(stackTrace);
} …Run Code Online (Sandbox Code Playgroud) 当 的 类型为 时, Flutter Riverpod 不会通知Consumer状态变化,而相同的实现对于其他类型来说效果很好。StateNotifierList
在这里,我提供了一个最小的可重现示例:
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ProviderScope(
child: MaterialApp(
home: MyHomePage(),
),
);
}
}
class CounterState extends StateNotifier<List<int>> {
static final provider = StateProvider(
(ref) => CounterState(),
);
int get last {
print('last');
return state.last;
}
int get length {
print('len');
return state.length;
}
// the body of this will be …Run Code Online (Sandbox Code Playgroud) 我创建了简单的应用程序来测试 bloc 7.2.0,并发现 BlocBuilder 在第一次成功重建后不会重建。在每个其他触发器上,bloc 都会发出新状态,但 BlocBuilder 会忽略它。
请注意,如果我 extends Equatable从状态和事件中删除及其覆盖,则每次按下按钮时 BlocBuilder 都会重建 UI。颤振版本2.5.1
如果 Equatable 是必要的,为什么它不能使用它呢?如果 Equatable 不是必需的,为什么在通过 VSCode 扩展进行初始创建时使用它。
我的代码:
块部分
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
//bloc
class MainBloc extends Bloc<MainEvent, MainState> {
MainBloc() : super(MainInitial()) {
on<MainButtonPressedEvent>(_onMainButtonPressedEvent);
}
void _onMainButtonPressedEvent(
MainButtonPressedEvent event, Emitter<MainState> emit) {
emit(MainCalculatedState(event.inputText));
}
}
//states
abstract class MainState extends Equatable {
const MainState();
@override
List<Object> get props => [];
}
class MainInitial extends MainState {}
class MainCalculatedState extends MainState {
final String exportText; …Run Code Online (Sandbox Code Playgroud) 当我尝试访问特定屏幕时,我收到“空值检查运算符”。
我屏蔽了我的“user_provider”自定义类以及使用它的部分代码,它正常显示(没有红屏),但没有这些屏幕。
这是自定义类
import 'package:flutter/widgets.dart';
import 'package:purple/models/user.dart';
import 'package:purple/resources/auth_methods.dart';
class UserProvider with ChangeNotifier {
User? _user;
final AuthMethods _authMethods = AuthMethods();
User get getUser => _user!;
Future<void> refreshUser() async {
User user = await _authMethods.getUserDetails();
_user = user;
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
我理解这可能是由于第 9 行中的 bang 运算符造成的,但我是 fluttr 的新手,不知道如何解决它。
*我在react应用程序中创建了2个Zustand存储,一个称为UserStore,另一个称为SettingsStore,如何获取从UserStore到SettingsStore的状态?*
import create from 'zustand';
const UserStore = (set, get) => ({
user: {},
});
Run Code Online (Sandbox Code Playgroud)
我想将此“用户”变量用于我的另一个名为 SettingsStore 的商店
import create from 'zustand';
const SettingsStore = (set, get) => ({
});
Run Code Online (Sandbox Code Playgroud) store state-management reactjs react-state-management zustand