获取导出组件的当前状态值

Posted

技术标签:

【中文标题】获取导出组件的当前状态值【英文标题】:Getting the current state value of an exported component 【发布时间】:2021-09-01 15:21:56 【问题描述】:

我为我的 React 应用程序构建了一个自动完成组件,并使用此 tutorial 将其导出到另一个组件中。一切都适用于自动更正,但我有一个单独的按钮,需要获取自动完成用户输入的状态值,并将其作为参数插入到表单 onSubmit 事件期间的 API 调用中。

<div className="sidebar" style=
            borderLeft: "1px solid gray"
        >
            <h2 style= textAlign: "center" > Filter</h2>
            <form onSubmit=(e) =>  e.preventDefault(); callSearchAPI(//Autocomplete value); >
                <label style=>Name</label> <br />
                <input
                    placeholder="Type name"
                    style= textAlign: "center", marginRight: "10px", height: "25px" 
                    value=interest
                    onChange=HandleChange></input>
                <Autocomplete suggestions=namesData />
                <button className="btn btn-primary" > Search</button>
                <br />
                <div>namesData</div>
            </form>
            <p>namesData</p>
        </div>

自动完成组件有一个onChangeonClick 事件处理程序/侦听器,只要在文本框中输入新值或从自动完成下拉菜单中选择新值,就会更新组件状态。我需要做的就是在另一个组件中获取当前值并将其插入&lt;form onSubmit=(e) =&gt; e.preventDefault(); callSearchAPI(//Autocomplete value); &gt;(如果这是香草javascript,我可以简单地添加一个id并使用=>document.getElementById("Autocomplete").value)。我如何在 React 中做到这一点?我可以在第二个组件中创建另一个 onChange 处理程序还是有更简单的解决方案?

class Autocomplete extends Component 
    constructor(props) 
        super(props);
        this.state = 
            activeSuggestion: 0,
            filteredSuggestions: [],
            showSuggestions: false,
            userInput: ""
        ;
    

    onChange = e => 
        const  suggestions  = this.props;
        const userInput = e.currentTarget.value;

        const filteredSuggestions = suggestions.filter(
            suggestion =>
                suggestion.toLowerCase().indexOf(userInput.toLowerCase()) > -1
        );

        this.setState(
            activeSuggestion: 0,
            filteredSuggestions,
            showSuggestions: true,
            userInput: e.currentTarget.value
        );
    ;

【问题讨论】:

【参考方案1】:

在父组件中,您可以使用 React ref 来访问子类组件的状态。

const autoCompleteRef = useRef(); // <-- (1) create a ref

...

<form
  onSubmit=(e) => 
    e.preventDefault();

    // access the state
    const  state  = autoCompleteRef.current; // <-- (3) access ref current value
    console.log(state.userInput);

    callSearchAPI(//Autocomplete value);
  
>
  <label>Name</label>
  <br />
  <input
    placeholder="Type name"
    style= textAlign: "center", marginRight: "10px", height: "25px" 
    value=interest
    onChange=HandleChange
  />
  <Autocomplete
    ref=autoCompleteRef // <-- (2) attach the ref
    suggestions=namesData
  />
  <button className="btn btn-primary">Search</button>
  <br />
  <div>namesData</div>
</form>

【讨论】:

这就是我所需要的; useRef()!感谢您在 cmets 中放置的详细步骤。很有帮助。

以上是关于获取导出组件的当前状态值的主要内容,如果未能解决你的问题,请参考以下文章

如何获取element-ui checkbox组件当前状态的值

将状态从钩子函数导出到另一个组件

this.triggerEvent获取自定义组件中的状态

如何在 JSF 组件中监控异步/后台线程状态并获取通知

我正在尝试获取我的产品消费者当前状态

Angular 网络连接状态组件