【发布时间】:2020-07-19 03:45:43
【问题描述】:
我正在努力解决可能非常简单的事情。我的父组件是一个 Search 小部件,它需要使用在单独的 Drawer 组件中定义的过滤器。目前用户可以输入一个搜索查询,调用一个API,它需要根据抽屉组件的选择器过滤结果。但是,我无法链接父母和孩子来实现这一点!!
父组件(其中包含''组件):
function SuburbSearch(props: Props) {
const classes = useStyles();
const [value, setValue] = React.useState<App.Suburb | null>(null);
const [inputValue, setInputValue] = React.useState('');
...
return (
<Autocomplete
id="search"
getOptionLabel={(option) => (typeof option === 'string' ? option : option.name + ' ' + option.state)}
filterOptions={(x) => x}
options={options}
...
...
renderInput={(params) => (
<TextField
{...params}
label="Search for a suburb"
...,
startAdornment: (
<InputAdornment position="start">
<Filters></Filters>
</InputAdornment>
),
endAdornment: (
<React.Fragment>
{loading ? <CircularProgress color="inherit" size={20} /> : null}
{params.InputProps.endAdornment}
</React.Fragment>
),
}}
fullWidth
/>
)}
子组件(这是“过滤器”):
export default function Filters() {
const classes = useStyles();
const [state, setState] = useState(false);
const [dollar, setDollars] = useState<number[]>([0, 20000000]);
const [type, setType] = React.useState<string | null>('all');
...
const list = (anchor: Anchor) => (
<div className={classes.root}
role="presentation" /*onClick={toggleDrawer(false)} onKeyDown={toggleDrawer(false)}/*/>
<Grid className={classes.main} container spacing={2}>
<Grid className={classes.row} item xs={1} md={2} />
<Grid className={classes.row} item xs={10} md={8}>
<Typography className={classes.header} align='center' gutterBottom>
Property Type
</Typography>
<ToggleButtonGroup value={type} onChange={handleTypeChange} exclusive>
<ToggleButton value="all" >All</ToggleButton>
<ToggleButton value="some" >Some</ToggleButton>
</ToggleButtonGroup>
</Grid>
...
</Grid>
</div>
}
【问题讨论】:
-
你能在codeandbox中重现这个问题吗?
-
在不知道为什么以及需要从孩子发送给父母的数据的情况下,不可能给您任何建议。生成沙箱或明确提及父子组件之间交互的所有数据及其流动方向。
-
在 recat js 中,无法将数据从子组件发送到父组件。你可以使用 redux 和 react-redux 库来做到这一点。
-
我会尝试重新格式化,但有点棘手,因为这些组件已经有很多代码(这让事情更加混乱)。我正在寻找的模式实际上可能非常简单......在上面我有一个“SuburbSearch”,它实际上只是一个调用 API 的搜索输入字段,并且需要过滤结果;过滤器位于一个名为“Filters”的单独抽屉组件中...但是我无法解决的是当过滤器组件关闭时如何读取 SuburbSearch 组件中的过滤器值...
-
好的,如果您需要来自组件的某些内容,无论该组件是否安装在 DOM 中,然后将该数据放在上下文中,并在您需要的任何地方从它访问它。如果你知道 redux,那么你也可以使用它。
标签: reactjs rxjs material-ui