如何干净地将信息传递给封闭组件?

How to cleanly pass information to an enclosing component?

我是一个笨手笨脚的 mobx 初学者,他刚刚发现自己在做一些奇怪的事情,比如将 props 中的 "holder" 结构传递给一个修改其内容的内部组件,并通过这种方式将更改传播到外部组件。这听起来很脏,但是传递一堆回调感觉更脏。

传递的信息包含诸如第一个可见元素的索引之类的东西,这是除了内部组件之外没有人可以而且应该计算的东西。其他组件甚至应该不知道有滚动条或类似的东西。

我希望这段代码能说明我的问题。你能告诉我一个干净的解决方案吗?

@observer class Inner {
    _someChange = (event) => {
        this.props.holder.something = event.something
    }

    _anotherChange = (whatever) => {
        this.props.holder.anotherthing = whatever.anotherthing
    }

    render() {
        return <div>
            <Something onClick={this._someChange} onWhatever={this._anotherChange}/>
    </div>
}

@observer class Outer {
    @observable _holder = {
         something: 0,
         anotherthing: '',
    }

    render() {
        return <div>
            <Inner holder={this._holder}/>
            <AComponentNeedingTheHolderContent something={this._holder.something}/>
        </div>
    }
}

据我了解,您想要的是能够在兄弟 InnerAComponentNeedingTheHolderContent 之间共享数据。

使用 React 执行此操作的方法是按照您现有的方式将状态保持在外部,并定义可以修改此状态并将其传递给内部的函数。例如:

@observer class Inner {
    clickHandler = (event) => {
        this.props.modify_something(event.value);
    }

    render() {
        return <div>
            <Something onClick={this.clickHandler}/>
    </div>
}

@observer class Outer {
    @observable something = 'something';

    @action
    modify_something = (modified_value) => {
        this.something = modified_value;
    }

    render() {
        return <div>
            <Inner modify_something={this.modify_something} />
            <AComponentNeedingTheHolderContent something={this.something}/>
        </div>
    }
}