繁体   English   中英

在 React 父功能组件 (react-dual-listbox) 中访问 React 子类组件状态的最佳方法

[英]Best way to access state of a React child class component in React parent functional component (react-dual-listbox)

我倾向于使用反应功能组件和钩子,因为我没有很多反应经验。 我想在父功能组件中使用 react-dual-listbox 类组件。 在这个父组件中,我希望能够访问子类组件的selected状态。 做这个的最好方式是什么?

来自https://github.com/jakezatecky/react-dual-listbox 的子 react-dual-listbox 组件

import React from 'react';
import DualListBox from 'react-dual-listbox';

const options = [
    { value: 1, label: 'Option One' },
    { value: 2, label: 'Option Two' },
];

class DualListChild extends React.Component {
    state = {
        selected: [1],
    };

    onChange = (selected) => {
        this.setState({ selected });
    };

    render() {
        const { selected } = this.state;

        return (
            <DualListBox
                options={options}
                selected={selected}
                onChange={this.onChange}
            />
        );
    }
}

包含在标准功能组件中

function Parent() {
    return(
        <div>
            <DualListChild/>
        </div>
    )
}

export default Parent;

例如,是否有可能在父组件中有一个钩子来改变与双列表框选择的状态相对应的状态? 基本上我想将状态传递给一个功能组件? 有没有办法做到这一点?

谢谢

你会做一些类似于你在DualListChild做的DualListChild ,除了使用useState钩子:

class DualListChild extends React.Component {
    onChange = (selected) => {
        this.props.onSelected(selected);
    };

    render() {
        return (
            <DualListBox
                options={options}
                selected={this.props.selected}
                onChange={this.onChange}
            />
        );
    }
}

function Parent() {
    const [selected, setSelected] = React.useState();
    return (
        <div>
            <DualListChild selected={selected} onSelected={setSelected} />
        </div>
    )
}

现在您可以访问Parent组件中的selected (甚至setSelected )。

作为另一种方式,您可以使用另一个状态来跟踪父级中的选定选项并将其 setter 函数发送给子级。 每当子节点的状态发生变化时,调用来自父节点的 setter 函数。 通过这种方式,选定的选项状态将随时为子组件和父组件提供最新值。

function Parent() {
    const [selectedOptions, setSelectedOptions] = useState([]);

    return(
        <div>
            <DualListChild onSelectedOptionsChange={setSelectedOptions}/>
        </div>
    )
}

export default Parent;


class DualListChild extends React.Component {
    ...
    onChange = (selected) => {
        this.setState({ selected });
        props.onSelectedOptionsChange(selected);
    };
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM