为什么当我按下按钮时,尽管Name = false,但标题不会更改为“隐藏详细信息”?
let Name= true;
const Tekst= () =>{
Name=false;
Render();
};
const template = (
<div>
<h1>Visibility Toggle</h1>
<button onClick={Tekst}>{Name ? 'Show details' : 'Hide details'}</button>
</div>
);
const root= document.getElementById('app');
const Render = () =>ReactDOM.render(template, root);
Render();
请注意,您的模板jsx是硬编码的,并且仅在程序最初运行时评估一次。所以它只需要Name
的值作为true
并成为常数。再次渲染它不会以任何方式改变。您应该使用组件而不是:
<Template />
let Name = true;
const Tekst = () => {
Name = !Name;
Render();
};
const Template = () => (
<div>
<h1>Visibility Toggle</h1>
<button onClick={Tekst}>
{Name ? "Show details" : "Hide details"}
</button>
</div>
);
const root = document.getElementById("app");
const Render = () => ReactDOM.render(<Template />, root);
Render();
<div id="app"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
我就是这样做的:
class Template extends React.Component {
constructor() {
super();
this.state = {name: true};
}
test = () => {
this.setState({name: !this.state.name});
};
render() {
return (
<div>
<h1>Visibility Toggle</h1>
<button onClick={this.test}>{this.state.name ? 'Show details' : 'Hide details'}</button>
</div>
)
}
}
ReactDOM.render(
<Template/>,
document.getElementById("root")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
因为组件仅在状态或道具发生变化时呈现。您定义组件的方式,它没有任何道具或状态。
尝试:
class Tekst extends React.Component {
constructor(props) {
super(props);
this.state = { Name: true };
this.toggle = this.toggle.bind(this);
}
toggle() {
this.setState({ Name: !this.state.Name });
}
render() {
return (
<div>
<h1>Visibility Toggle</h1>
<button onClick={this.toggle}>{ this.state.Name ? 'Show details' : 'Hide details'} />
</div>
);
}
}
我不确定您的反应版本或环境版本,但这应该适用于大多数设置。
看来OP对React的理解非常有限。这不是批评,我们都必须从某个地方开始(我不会认为自己远远超过React的初级水平:))。但是如果你想用React制作一些东西,即使只是一个玩具的例子,我强烈建议你阅读https://reactjs.org/docs/hello-world.html及后续页面的介绍性文档。特别是,我提请你注意以下几点: