【发布时间】:2020-04-15 21:31:51
【问题描述】:
我只想在单击按钮时在 Home.js 中获取 div 的文本...我已经设置了 createContext();
我尝试使用 Refs 它不起作用..所以现在我正在尝试 createContext()... Home.js 中一个 div 的文本内容。
Index.js:
import React from "react";
import ReactDOM from "react-dom";
import { ThemeContextProvider } from "./themeContext";
import App from "./App";
const RootElement = document.getElementById("root");
ReactDOM.render(
<ThemeContextProvider>
<App />
</ThemeContextProvider>,
RootElement
);
themeContext.js:
import React, { Component } from "react";
const { Provider, Consumer } = React.createContext();
class ThemeContextProvider extends Component {
state = {
test: "test"
};
handleChange = () => {
this.test.textContent
};
render() {
return (
<Provider
value={{ test: this.state.test, handleChange: this.handleChange }}
>
{this.props.children}
</Provider>
);
}
}
export { ThemeContextProvider, Consumer as ThemeContextConsumer };
Button.js:
import React from "react";
import { ThemeContextConsumer } from "./themeContext";
export default function Button(props) {
return (
<>
<ThemeContextConsumer>
{context => <button onClick={context.handleChange}>ooMe</button>}
</ThemeContextConsumer>
</>
);
}
Home.js:
import React from "react";
import { ThemeContextConsumer } from "./themeContext";
import Button from "./Button";
export default function Home(props) {
return (
<>
<ThemeContextConsumer>
{context => (
<>
<div className={context.test}>You Exposed Me!</div>
<br />
<h4>
Button From Test:
<br />
<Button handleChange={context.handleChange} />
</h4>
</>
)}
</ThemeContextConsumer>
</>
);
}
App.js
import React from "react";
import "./styles.css";
import Home from "./Home";
import Another from "./Another";
export default function App() {
return (
<div className="App">
<Home />
<Another />
</div>
);
}
【问题讨论】:
-
React Context 是关于将数据向下传递给子组件,而不必通过每个中间树节点传递它们。它甚至无法与
querySelector()相比。 -
是的,我注意到 React 比传统的 JavaScript 更难使用。而且很难找到像样的文档
-
那么您的目标是什么?有一个孩子导致另一个孩子发生变化吗?因为“获取 div 的文本”听起来很奇怪。
-
基本上当我的按钮被点击时,我希望从 Home.jsYou Exposed Me!中的 div 中获取文本内容。单击按钮时,它应该返回 You Exposed Me!类似于 document.getElementById(".test").textContent 将如何返回 You Exposed Me!我一直在尝试找出在 React.js 中执行此操作的正确方法
-
主要问题是你需要先正确使用
createRef()和ref。然后你需要让它们成为上下文的一部分:codesandbox.io/s/exciting-darwin-x602c?file=/src/…
标签: javascript reactjs dom