Javascript 有没有一种方法可以在组件外部更新recoilJS上的状态?

Javascript 有没有一种方法可以在组件外部更新recoilJS上的状态?,javascript,recoiljs,Javascript,Recoiljs,因此,我正在为我正在构建的js游戏尝试recoilJS,它非常整洁,但是从组件更新原子的需求感觉只是一个限制 为了创建一个游戏循环,我将所有逻辑放在空组件上,以便能够读取和写入状态。即使我将在组件外部构建登录,我也需要始终移动不同的统计信息。有一种方法可以更新react组件之外的原子(不是通过挂钩)?现在没有。为反冲团队打开了一个建议。我用来帮助在组件外部设置反冲JS值 开始时,我创建了4个零件作为 主要成分 将RecoilJS设置为组件文件的外部值 1) 梅因先生 3) .Atom文件 e

因此,我正在为我正在构建的js游戏尝试recoilJS,它非常整洁,但是从组件更新原子的需求感觉只是一个限制


为了创建一个游戏循环,我将所有逻辑放在空组件上,以便能够读取和写入状态。即使我将在组件外部构建登录,我也需要始终移动不同的统计信息。有一种方法可以更新react组件之外的原子(不是通过挂钩)?

现在没有。为反冲团队打开了一个建议。

我用来帮助在组件外部设置反冲JS值

开始时,我创建了4个零件作为

  • 主要成分
  • 将RecoilJS设置为组件文件的外部值
  • 1) 梅因先生

    3) .Atom文件

    export const textState = atom({
      key: 'textState'
      default: ''
    });
    
    4) .将RecoilJS设置在组件文件的值之外

    import API from './Api';
    import { setRecoil } from './RecoilJSComponent'
    import { textState } from './textState'
    
    export const setValueReCoil = () => {
    
        API()
            .then(result => {
    
               setRecoil({ recoilObj: textState, value: result })
    
            })
            .catch(ex => {
            
            })
    };
    
    主要的偶像是在2和4

    在第二位, 我创建RXJS以通过组件设置值,并导出RXJS以在组件外部的RecoilJS上设置值

    import React from 'react';
    import {
        useRecoilCallback
    } from 'recoil';
    import { Subject } from 'rxjs';
    
    export const setRecoil = new Subject();
    
    const getRecoil = new Subject();
    const returnRecoil = new Subject();
    
    export const promiseGetRecoil = (recoilObj) => {
        return new Promise(async (resolve, reject) => {
            getRecoil.next(recoilObj)
            returnRecoil.subscribe({
                next: (value) => {
                    if (recoilObj === value.recoilObj) {
                        resolve(value.value)
                    }
                }
            });
        })
     }
    
    export default function RecoilJSComponent() {
    
        const setStore = useRecoilCallback(({ set }) => (n) => {
            set(n.recoilObj, () => (n.value));
        }, [])
    
        const getStore = useRecoilCallback(({ snapshot }) => async (recoilObj) => {
        
        const valueRecoilObj = await snapshot.getPromise(recoilObj);
        returnRecoil.next({ recoilObj: recoilObj, value: valueRecoilObj })
    
     }, [])
    
        setRecoil.subscribe({
            next: (value) => {
                setStore(value)
            }
        });
    
        getRecoil.subscribe({
            next: (recoilObj) => {
                getStore(recoilObj)
            }
        });
    
        return null;
    }
    

    我希望我的偶像能帮助你解决你的问题

    你可以使用react wire。类似的API,但也可以在react上下文之外使用。请参见中的
    createWire
    createSelector
    。我创建了一个包来解决此问题。祝你好运。我只是想说这个答案太棒了。我没有使用RxJS,而是使用了我自己的sub/pub全局回调,但这个想法非常棒。我只是想说谢谢你让我走上了正确的道路。
    import API from './Api';
    import { setRecoil } from './RecoilJSComponent'
    import { textState } from './textState'
    
    export const setValueReCoil = () => {
    
        API()
            .then(result => {
    
               setRecoil({ recoilObj: textState, value: result })
    
            })
            .catch(ex => {
            
            })
    };