使用setstate而不使用react开发工具

v9tzhpje  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(246)

我们有 $r 安装react-dev工具扩展时可用。不使用react-dev工具就可以得到这样的东西吗?
例如
具有 $r 这项工作:

$r.setState((state) => {
    return {username: "blabla"}
})

我需要做一些类似的事情,但是没有react-dev工具。

lf5gs5x2

lf5gs5x21#

好的,在访问第三方react应用程序状态的帮助下,我终于可以自己做了
修改了此处答案中的代码以更改状态:

function setAppState(rootNode, globalAttributeName, newValue) {
    var $root = $(rootNode)._reactRootContainer;
    var reactState = false;
    var searchStack = [];
    var searched = [];

    // Fetch the "_internalRoot" attribute from the DOM node.
    for ( const key in $root ) {
        if (0 === key.indexOf('_internalRoot') ) {
            searchStack.push($root[key]);
            break;
        }
    }

    // Find the state by examining the object structure.
    while (searchStack.length) {
        var obj = searchStack.pop();

        if (obj && typeof obj == 'object' && -1 === searched.indexOf(obj)) {
            if ( undefined !== obj[ globalAttributeName ] ) {
                reactState = obj;
                break;
            }

            for (i in obj) {
                searchStack.push(obj[i]);
            }
            searched.push(obj);
        }
    }

    // Take the last pushed object as it contains the State to be changed
    state = searched[searched.length - 1].memoizedState;
    state[globalAttributeName] = newValue;

    return state;

}
``` `rootNode` 将是react应用程序根元素的id,例如。

# app `globalAttributeName` 将是你需要改变的关键 `newValue` 将是该钥匙的新状态

相关问题