Ваш вариант использования может быть решен с использованием React context .С помощью Context любой дочерний элемент, завернутый в предоставленный файл, может быть потребителем данных, предоставленных поставщиком.
В вашем случае вы можете использовать его как
context.js
export const FetchContext = React.createContext();
Provider.js
import { FetchContext } from 'path/to/context.js';
class FetchProvider extends React.Component
{
proptypes= {
data: PropTypes.shape({}),
theme: PropTypes.shape({})
}
render()
{
const { data, theme, children } = this.props;
return (
<FetchContext.Provider value={{ data, theme}}>
{children}
</FetchContext.Provider>
)
}
mapStateToProps()
{
return {data, theme};
}
}
ChildComponent.js
class ChildComponent extends React.Component
{
proptypes= {
name: PropTypes.shape({})
}
render()
{
const{data, them} = this.props; // use it from props here
// do some
}
}
export default (props) => (
<FetchContext.Consumer>
{({ data, theme }) => <ChildComponent {...props} data={data} theme={theme} />}
</FetchContext.Consumer>
)
Однако, учитывая тот факт, что вы уже используете Redux, который построен наВ контексте контекста вы также можете использовать избыточность и получить доступ к значениям в дочернем компоненте, поскольку они представляют собой те же значения, которые передаются из хранилища Redux дочернему элементу родительским элементом.
class ChildComponent extends React.Component
{
proptypes= {
name: PropTypes.shape({})
}
render()
{
const{data, them} = this.props; // use it from props here
// do some
}
}
const mapStateToProps = (state) => {
return {
data: state.data,
theme: state.theme
}
}