Reactjs 从子组件设置状态,并使用上下文API将其传递给父组件

Reactjs 从子组件设置状态,并使用上下文API将其传递给父组件,reactjs,context-api,Reactjs,Context Api,我有一个有状态的应用程序组件,它的任务是获取数据。它将获取的数据基于用户在输入字段中键入的内容。输入字段位于另一个组件中,该组件封装在该组件中,而应用程序组件封装在该组件中 如何将数据从输入字段传递到Search.js中的onSearch函数? App.js 类应用程序扩展组件{ 状态={ 图像:[], 值:“”, }; onSearch=(查询)=>{ axios .得到( `https://www.flickr.com/services/rest/?method=flickr.photos.

我有一个有状态的应用程序组件,它的任务是获取数据。它将获取的数据基于用户在输入字段中键入的内容。输入字段位于另一个组件中,该组件封装在该组件中,而应用程序组件封装在该组件中

如何将数据从输入字段传递到Search.js中的onSearch函数? App.js

类应用程序扩展组件{
状态={
图像:[],
值:“”,
};
onSearch=(查询)=>{
axios
.得到(
`https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=${apiKey}&tags=${query}&per_page=24&format=json&nojsoncallback=1`
)
。然后((res)=>{
这是我的国家({
图片:res.data.photos.photo,
});
})
.catch((错误)=>{
log('尝试获取数据时出错:',err);
});
};
render(){
返回(
);
}
}
Search.js

<Consumer>
      {(context) => {
        const handleChange = (e) => {
          context.value(e.target.value);
        };

        const handleSubmit = (e) => {
          e.preventDefault();
          context.actions.onSearch();
          e.currentTarget.reset();
        };

        return (
          <form className='search-form' onSubmit={handleSubmit}>
            <input
              type='search'
              name='search'
              placeholder='Search'
              required
            />
            <button type='submit' className='search-button'>
              <svg
                fill='#fff'
                height='24'
                viewBox='0 0 23 23'
                width='24'
                xmlns='http://www.w3.org/2000/svg'
              >
                <path d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z' />
                <path d='M0 0h24v24H0z' fill='none' />
              </svg>
            </button>
          </form>
        );
      }}
    </Consumer>

{(上下文)=>{
常数handleChange=(e)=>{
上下文值(即目标值);
};
常量handleSubmit=(e)=>{
e、 预防默认值();
context.actions.onSearch();
e、 currentTarget.reset();
};
返回(
);
}}

我有一个类似问题的答案。希望这有帮助!我有一个类似问题的答案。希望这有帮助!
<Consumer>
      {(context) => {
        const handleChange = (e) => {
          context.value(e.target.value);
        };

        const handleSubmit = (e) => {
          e.preventDefault();
          context.actions.onSearch();
          e.currentTarget.reset();
        };

        return (
          <form className='search-form' onSubmit={handleSubmit}>
            <input
              type='search'
              name='search'
              placeholder='Search'
              required
            />
            <button type='submit' className='search-button'>
              <svg
                fill='#fff'
                height='24'
                viewBox='0 0 23 23'
                width='24'
                xmlns='http://www.w3.org/2000/svg'
              >
                <path d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z' />
                <path d='M0 0h24v24H0z' fill='none' />
              </svg>
            </button>
          </form>
        );
      }}
    </Consumer>