React Ts,从子访问父状态
React Ts, Access Parents state from Child
所以我一直在尝试从子组件访问父状态,但是我一直收到错误消息或者它不能一起工作。
我在网上找到了多种解决方案,但是 none 它们适用于 React with Typescript。
下面是我正在尝试做的简化代码示例。
export default class parent extends React.Component {
state= {
exist: true
}
render() {
return (
<div>
<child>
<div>
)
}
export default class child extends React.Component {
componentDidMount = () => {
document.getElementById("theText").value = "It does exist!"
}
render() {
return (
<div>
<h1 id="theText">It Doesn't exist</h1>
<div>
)
}
PS// 这不是我正在处理的代码!我只是快速地写了它,以便更容易看到我要做什么!
您可以使用称为 props 的东西将状态从 parent 传递到 child。这些 props 可以是变量,也可以是函数。当然,因为它是打字稿,所以你需要定义它。道具的类型可以用接口定义:
interface ChildProps {
Exists: boolean;
// You can skip this one if you don't want to alter the state
// in the parent from the child component.
SetExists: (value: boolean) => void;
}
接口在React.Component<ChildProps>
中用作通用参数
export default class child extends React.Component<ChildProps> {
componentDidMount = () => {
document.getElementById("theText").value = "It does exist!"
}
render() {
// Depending on the state of the parent, something can be rendered here.
if(this.props.Exists)
return <h1>Does exists! :)</h1>;
else
return <h1>Doesn't exist :(</h1>;
}
}
您还需要稍微更改 parent 组件。看起来像这样:
export default class parent extends React.Component {
state = {
exist: true
}
render() {
return (
<div>
<child
// Here, the state is passed to a child component as if it
// were an argument of a function.
Exists={this.state.Exists}
SetExists={(x) => this.setState({ Exists: x })}
>
<div>
)
}
希望本文对您有所帮助,并能解决您的问题。如果没有,请告诉我,以便我们继续寻找解决方案。 :)
所以我一直在尝试从子组件访问父状态,但是我一直收到错误消息或者它不能一起工作。 我在网上找到了多种解决方案,但是 none 它们适用于 React with Typescript。
下面是我正在尝试做的简化代码示例。
export default class parent extends React.Component {
state= {
exist: true
}
render() {
return (
<div>
<child>
<div>
)
}
export default class child extends React.Component {
componentDidMount = () => {
document.getElementById("theText").value = "It does exist!"
}
render() {
return (
<div>
<h1 id="theText">It Doesn't exist</h1>
<div>
)
}
PS// 这不是我正在处理的代码!我只是快速地写了它,以便更容易看到我要做什么!
您可以使用称为 props 的东西将状态从 parent 传递到 child。这些 props 可以是变量,也可以是函数。当然,因为它是打字稿,所以你需要定义它。道具的类型可以用接口定义:
interface ChildProps {
Exists: boolean;
// You can skip this one if you don't want to alter the state
// in the parent from the child component.
SetExists: (value: boolean) => void;
}
接口在React.Component<ChildProps>
export default class child extends React.Component<ChildProps> {
componentDidMount = () => {
document.getElementById("theText").value = "It does exist!"
}
render() {
// Depending on the state of the parent, something can be rendered here.
if(this.props.Exists)
return <h1>Does exists! :)</h1>;
else
return <h1>Doesn't exist :(</h1>;
}
}
您还需要稍微更改 parent 组件。看起来像这样:
export default class parent extends React.Component {
state = {
exist: true
}
render() {
return (
<div>
<child
// Here, the state is passed to a child component as if it
// were an argument of a function.
Exists={this.state.Exists}
SetExists={(x) => this.setState({ Exists: x })}
>
<div>
)
}
希望本文对您有所帮助,并能解决您的问题。如果没有,请告诉我,以便我们继续寻找解决方案。 :)