当前位置: 首页 > 知识库问答 >
问题:

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

查锦程
2023-03-14

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

来自https://github.com/jakezatecky/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;

例如,是否可能在父组件中有一个钩子,该钩子会根据dual listbox选择的内容更改状态?本质上我想把状态传递给一个功能组件?有办法做到这一点吗?

谢谢

共有2个答案

巢靖
2023-03-14

作为一种替代方法,您可以有另一种状态来跟踪父级中选定的选项,并将其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);
    };
    ...
}
鲁烨熠
2023-03-14

除了使用useState钩子,您可以执行与在DualListChild中类似的操作:

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>
    )
}

现在,您可以访问父组件中的选定的(甚至setSelected)。

 类似资料:
  • 我在react native中有一个搜索栏组件,它在父组件中导入, SearchBar子组件具有以下元素: 是否可以访问此子组件在其中导入的父组件中的状态?提前感谢你的帮助

  • 我创建了一个包含登录组件和注册组件的签名页面组件。我的问题是,我如何传递一个onhtml函数从父到子,以便更改我的父组件(签名页组件)的状态?我期望的是,通过单击子组件中的按钮,可以切换父组件的活动状态,并根据活动状态更改样式。我试图通过一个处理功能从父到子,但它不能很好地工作。 有什么解决办法吗? codesandbox中的详细信息:https://codesandbox.io/s/wizard

  • 如何访问父组件中的窗体状态 这就是我正在做的(只是一个简短的代码,请忽略语法) 现在的问题是,如果onSelect handler()中的子对象脏了,我无法通知父对象不要呈现该子对象。我不能在render方法中执行setState,至少我可以提前通知使用componentDidUpdate,谢谢

  • 问题内容: 我有两个组件: 父组件 ,我想从中更改子组件的状态: 和 子组件 : 我需要从父组件更改子组件的 打开 状态,还是单击父组件中的按钮时从父组件调用子组件的 toggleMenu() ? 问题答案: 状态应在父组件中进行管理。您可以通过添加属性将值传输到子组件。

  • 我用React构建了3个组件。他们是: 包装器 列表 列表项 如何管理单击的复选框的状态。我想Wrapper知道哪些复选框被选中。