【问题标题】:How to send value from child component to parent?(functional components)如何将值从子组件发送到父组件?(功能组件)
【发布时间】:2021-05-13 03:40:39
【问题描述】:

我有一个叫main_homepageComponent 的父母和两个孩子search_barComponentIteams_Component

我想做这样的事情:-

当用户在search_barComponentsearch-box(输入文本)中输入一些文本时,我想隐藏Iteams_Component

层次结构:-

--main_homepageComponent
  --search_barComponent
  --Iteams_Component

目前,我正在尝试在我的search_barComponent 中创建一个状态变量,当用户输入一些文本时:-

const [search, setSearch] = useState('')  //extra code removed
onChangeText={(text) => {setSearch(text)}}

在我的main_homepageComponent 中,我添加了这样的内容:-

 const [search, setSearch] = useState('') //extra code removed
  <ScrollView style={{ height: windowHeight }}>
                        {search.length < 1 ? (
                            <View>
                                <ItemsComponent></ItemsComponent>
                            </View>
                        ) : null}
                    </ScrollView>

但我不知道如何将search 值从search_barComponent 发送回main_homepageComponent,以便我可以运行

            {search.length < 1 ? (
                            <View>
                                <ItemsComponent></ItemsComponent>
                            </View>
                        ) : null}
                    </ScrollView>

当用户在搜索框中输入文本时隐藏Iteams_Component

请为functional components 提供答案,因为我不太了解class component

这是我的应用图片:-

【问题讨论】:

标签: reactjs react-native


【解决方案1】:

不用在每个组件中创建searchsetSearch 状态,只需在父组件中创建一个并将它们作为道具发送给子组件。 在 main_homepageComponent 中添加子组件时...

<Search_barComponent search={search} setSearch={setSearch}/>
<Iteams_Component search={search} setSearch={setSearch}/>

在子组件中只需使用props.searchprops.setSearch 而不是再次创建它们。

您必须始终牢记在反应中的一条规则:“单一事实来源,而不是更多”,使您的等级体系足够高,因此每个孩子都依赖于单一事实来源...

【讨论】:

    【解决方案2】:
    export default function Child (props) {
      const [ name, setName ] = React.useState({someDefault:1})
    
    useEffect(()=>{
        props.onChange(name);
      },[name]);
    
     return (
       <div>
         <input name="name" 
                onChange={e=>setName({...name, name:e.target.value})}
         />
       </div>
      )
    
    }
    
    
    
    
    export default function Parent () {
        const [ name, setName ] = React.useState({})
      
        const  handleChange = (newValue) =>{
            setName(newValue);
        }
        
        return (
            <div>
                <Child value={name} onChange={handleChange}/>
            </div>
        )
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-02
      • 2017-09-13
      • 1970-01-01
      • 2021-02-15
      • 2019-10-24
      • 2020-09-28
      • 2021-08-24
      • 1970-01-01
      • 2021-08-15
      相关资源
      最近更新 更多