【发布时间】:2019-08-15 20:19:00
【问题描述】:
我检查了other questions 和docs,但我无法让它工作。我想将处理函数传递给其道具中的子组件以在主题之间进行更改。
我在父组件和设置新状态的处理程序中定义了一个状态。我试过带参数和不带参数。
这是父母
class MyApp extends App {
constructor(props) {
super(props);
this.state = {
colorScheme: "light"
};
this.handleColorScheme = this.handleColorScheme.bind(this);
}
handleColorScheme = scheme => {
this.setState({ colorScheme: scheme });
};
render() {
const { Component, pageProps } = this.props;
const props = {
...pageProps,
schemeHandler: this.handleColorScheme
};
return (
<Container>
<ThemeProvider
theme={this.state.colorScheme === "light" ? theme : themeDark}
>
<Component {...props} />
</ThemeProvider>
</Container>
);
}
}
export default MyApp;
这是子组件
export default function Layout(props) {
const [theme, setTheme] = useState({
palette: {
type: "light"
}
});
const toggleDarkTheme = () => {
let newPaletteType = theme.palette.type === "light" ? "dark" : "light";
props.schemeHandler(newPaletteType);
};
return (
<div>
<CssBaseline />
<div className={classes.root}>
<AppBar
position="absolute"
color={"default"}
className={classes.appBar}
>
<Toolbar>
<IconButton onClick={toggleDarkTheme}>
<Dark />
</IconButton>
</Toolbar>
</AppBar>
<main className={classes.content}>
{props.children}
</main>
</div>
</div>
);
}
当我点击按钮时,它说toggleDarkTheme 不是一个函数。使用开发工具进行调试,我发现我从未达到父函数。这个函数怎么传入props?
【问题讨论】:
-
你能验证toggleDarkTheme真的触发了什么吗?只需注释掉该函数中的当前逻辑并执行 alert 或 console.log()
-
@ChristopherNgo 是的,它在子组件中触发
toggleDarkTheme函数 -
能否添加代码沙箱链接:codesandbox.io/s/new
标签: javascript reactjs next.js