我有一个父状态,它有一个“主题”状态。
尝试将子元素的样式内联到
style={{background:props.theme===“light”?“#fff”:“#000”}}
但问题是,当父组件状态更改时,子组件不会更新。当按下切换按钮在亮/暗之间改变状态时,我控制台记录父状态。父状态更新良好,但内联样式不变。指示子组件在加载页时被锁定为当前的任何状态。
这有什么原因吗?
我是新反应,所以很抱歉,如果这是一个愚蠢的问题!
家长
import React, { useState } from "react";
import "./App.scss";
import TweetArea from "./components/TweetArea";
import SwitchTheme from "./components/SwitchTheme";
import Header from "./components/Header";
import html2canvas from "html2canvas";
import { render } from "@testing-library/react";
function screenshot() {
html2canvas(document.querySelector("#tweetHere")).then((canvas) => {
document.body.appendChild(canvas);
});
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
theme: "light",
};
}
toggleTheme = (props) => {
this.setState({ theme: this.state.theme === "light" ? "dark" : "light" });
console.log(this.state.theme);
};
themeSwitcher = () => {
const selectedTheme = this.state.theme === "dark" ? "dark" : "";
if (selectedTheme === "dark") {
document.getElementByClass("tweetArea").style.background = "blue";
}
console.log("It ran");
};
render() {
return (
<div className="App">
<button onClick={this.toggleTheme}>Toggle</button>
<SwitchTheme theme={this.state.theme} />
<Header />
<TweetArea selectedTheme={this.state.theme} />
</div>
);
}
}
export default App;
儿童
import React, { useState } from "react";
import Tweet from "./Tweet";
import TweetUsername from "./TweetUsername";
import TweetTitle from "./TweetTitle";
import TweetTime from "./TweetTime";
import TweetData from "./TweetData";
const TweetArea = (props) => {
const [TweetValue, setTweetValue] = useState("");
const TweetHandler = (e) => {
setTweetValue(e.target.value);
};
const [UsernameValue, setUsernameValue] = useState("");
const UsernameHandler = (e) => {
setUsernameValue(e.target.value);
};
const [TitleValue, setTitleValue] = useState("");
const TitleHandler = (e) => {
setTitleValue(e.target.value);
};
const [RetweetValue, setRetweetValue] = useState("");
const RetweetHandler = (e) => {
setRetweetValue(e.target.value);
};
return (
<div class="tweetArea" style={{ background: props.selectedTheme }}>
<div class="innerContainer">
<div className="inputArea">
<div class="tweetInput_tweet">
<h5>Enter your Tweet</h5>
<input type="text" class="onTweet" onChange={TweetHandler} />
</div>
<div class="tweetInput_username">
<h5>What is the username</h5>
<input type="text" onChange={UsernameHandler} />
</div>
<div class="tweetInput_title">
<h5>What is the title</h5>
<input type="text" onChange={TitleHandler} />
</div>
<div class="tweetInput_retweet">
<h5>What is the retweet count</h5>
<input type="text" onChange={RetweetHandler} />
</div>
</div>
<div
class="tweet"
id="tweetHere"
style={{ background: props.theme === "light" ? "#fff" : "#000" }}
>
<div class="tweet_header">
<div class="tweet_avatar">
<img
src="https://via.placeholder.com/50"
alt="avatar"
class="avatar"
/>
</div>
<div class="tweet_person">
<TweetTitle TitleValue={TitleValue} />
<TweetUsername UsernameValue={UsernameValue} />
</div>
</div>
<Tweet TweetValue={TweetValue} />
<TweetTime />
<TweetData RetweetValue={RetweetValue} />
</div>
</div>
</div>
);
};
export default TweetArea;
道具是selectedtheme
<TweetArea selectedTheme={this.state.theme} />
您使用了props.theme
它应该是props.selectedtheme
我的反应结构是 在中有一个按钮,单击该按钮可通过家长向其兄弟姐妹发送消息。第一个孩子- 应用程序 选择研究 参与者表-这需要接收某个变量,例如在其状态中的
我是reactjs的新手,我不知道如何从父组件中更改子组件的状态。下面是代码 每当对父组件中的执行时,我希望子组件接收。 有什么建议吗?
我正在尝试制作一个很好的ApiWrapper组件来填充各种子组件中的数据。从我读到的所有内容来看,这应该是可行的:https://jsfidle.net/vinniejames/m1mesp6z/1/ 但由于某种原因,当父状态更改时,子组件似乎没有更新。 我是不是漏了什么?
在父组件中: 我有一个布尔状态: 我将其发送到子组件: 根据布尔值,我希望它呈现不同的组件。
我试图了解如何构建具有不同"页面"或"视图"的ReactJS应用程序。 我将以下组件作为我的基础应用程序,并且我正在React状态中使用currentState属性在视图中的活动组件之间切换。 它执行此任务,但在启动dataLoaded回调时,组件从不接收更新的recipes数组。 如何根据应用程序中的更新状态更新道具? 还是我处理这整件事的方式错了?
我是新手,基本上我正在尝试立即更新父组件的状态及其子组件(和)道具。当前仅更新父组件的状态。我会一步一步地解释清楚。 这里我有一个父组件 这个组件有两个对象数组(和),分别作为道具发送到和组件。接收selectedPlayer和setSseltedPlayer。两个组件都有一个组件和一个选择输入。在组件中,用户将选择一个团队,他们将显示所选团队的球员,而在组件中,将选择一个球员,他们将显示选中的玩