Javascript 订阅阵列更改
我试图在使用jQuery的现有项目中使用RxJS。每次单击按钮时,都会向Javascript 订阅阵列更改,javascript,rxjs,Javascript,Rxjs,我试图在使用jQuery的现有项目中使用RxJS。每次单击按钮时,都会向用户推送一个新值。如何在(用户)的中查看对用户的更改。订阅(…) 你好 常数{of}=rxjs 让用户=[ {a:“b”} ] 共(个用户)。订阅(数据=>{ console.log(数据) }) jQuery(document).on('click','hello',函数(){ push({c:'d'}) }) 使用RxJSscan操作符,可以将流转换为不同的形式,类似于JavaScript的原生.reduce()方法的工
用户
推送一个新值。如何在(用户)的中查看对用户的更改。订阅(…)
你好
常数{of}=rxjs
让用户=[
{a:“b”}
]
共(个用户)。订阅(数据=>{
console.log(数据)
})
jQuery(document).on('click','hello',函数(){
push({c:'d'})
})
使用RxJSscan
操作符,可以将流转换为不同的形式,类似于JavaScript的原生.reduce()
方法的工作方式。在本例中,每当您想要“推送”到users数组时,您可以简单地发出newUser主题上的另一个用户
// Create a new subject
const newUser = new Subject();
// Use scan to add new users into array of users
const users = newUser.pipe(scan((acc, user) => [ ...acc, user ], []));
// Subscribe to the list of users and log
users.subscribe(data => console.log(data));
// Add new user to array on document click
jQuery(document).on('click', '.hello', () => users.next({ c: 'd' }));
或者,您可以将新的ES6代理类与Subject一起使用
一种方法是使用
BehaviorSubject
因此,对于您的案例,请编写以下内容:
const users$ = new BehaviorSubject([{ a: 'b' }]);
users$.subscribe((users) => {
console.log(users);
});
jQuery(document).on('click', '.hello', function() {
const users = [...users$.value]; // write like this so that array stays immutable
users.push({ a: 'd' });
users$.next(users);
});
使用BehaviorSubject
可以获得当前值:users$.value
在
users$.next(users)
事件将被发出,并且console.log(users)
将发生在subscribe内部可观察对象可以使用数组作为输入,但它不能像这样“侦听”它。创建一个可观察的对象,该对象监听按钮的点击-这是(用户)的可观察对象的主要用例之一。不监视数组的更改,它只提供数组当前状态的单个值流。您可能需要查看“fromEvent”rxjs操作符
let usersUpdate=new Subject()
let users = [
{ a: "b" }
]
usersUpdate.subscribe(data => {
console.log(data)
})
let users=new Proxy([{ a: "b" }],{
set:(obj, prop, newval)=>{
obj[prop] = newval
userUpdate.next({obj, prop, newval})
return true
}
})
users.push('item')
const users$ = new BehaviorSubject([{ a: 'b' }]);
users$.subscribe((users) => {
console.log(users);
});
jQuery(document).on('click', '.hello', function() {
const users = [...users$.value]; // write like this so that array stays immutable
users.push({ a: 'd' });
users$.next(users);
});