代码之家  ›  专栏  ›  技术社区  ›  Guy

在不经过React状态的情况下呈现组件adhoc

  •  0
  • Guy  · 技术社区  · 8 年前

    我在找一种方法来替换阻塞 prompt 调用旧系统。它以阻塞方式请求用户输入:

     const name = prompt('name:', previousValue);
    
     if (name) {...
    

    我想用React组件替换它。我在整个系统中使用redux和context for i18n,所以我试图找到一种优雅的方式来实现它。我希望能够从应用程序中的每个方法调用它。

    目前,我在根应用程序组件中呈现了一个提示组件,并在传递回调时通过上下文公开它:

    class App extends Component {
    
        getChildContext = () => {
            return {
                i18n: i18n,
                prompt: this.prompt
            }
        };
    
        state = {
            showPrompt: null,
        };
    
        prompt = (title, value, callback) => {
            this._prompt = {title, value, callback};
    
            this.timeout = setTimeout(() => {
                this.setState({showPrompt: true});
            }, 100);
        }
    
     // ...class continues...
    

    用法:

    this.context.prompt('name', '', callback: (occurrences) => {
            if (name) {
                this.props.changeName(name);
            }
        }
    });
    

    但肯定有人带着更好的理由来了?

    0 回复  |  直到 8 年前