[英]React.js How Do You Concatenate Dynamic Text From State
请考虑以下事项:
export default class MyComponent extends React.Component {
constructor() {
super();
this.handleText1Change = this.handleText1Change.bind(this);
this.handleText2Change = this.handleText2Change.bind(this);
this.state = {
text1 : '',
text2 : '',
text3 : `Type something into one of the text fields`
}
}
handleText1Change = (e) => {
e.preventDefault();
this.setState({text1: e.target.value})
}
handleText2Change = (e) => {
e.preventDefault();
this.setState({text2: e.target.value})
}
render() {
return(
<div>
<div class="d-flex flex-row bd-highlight mb-3">
<div class="p-2 bd-highlight">
<label for="text1-box"><h4>Text1</h4></label><br />
<textarea
type="text"
value={this.state.text1}
onChange={this.handleText1Change} />
</div>
<div class="p-2 bd-highlight">
<label for="text2-box"><h4>Text2</h4></label><br />
<textarea
type="text"
value={this.state.text2}
onChange={this.handleText2Change} />
</div>
<div class="p-2 bd-highlight">
<label for="result"><h4>Combined Result</h4></label>
<br />
<p>{this.state.text1 ?
this.state.text1 :
this.state.text2 ?
this.state.text2 :
this.state.text1 && this.state.text2 ?
this.state.text1 + this.state.text2 :
this.state.text3 }</p>
</div>
</div>
</div>
)
}
}
如果在 Text1 或 Text2 的 textarea 中输入,我可以显示动态文本,但似乎无法根据条件this.state.text1 && this.state.text2
组合动态文本。
我想在两个 textarea 框中键入任何文本并获取组合文本this.state.text1 + this.state.text2
(如我的三元语句中所指定)。
但它不起作用,它似乎只是渲染 OR 而不是 AND。
如何让它动态呈现连接的动态文本? 这可能吗?
更清楚地说,如果我在第一个 textarea 中输入 'apple',在第二个 textarea 中输入 'banana',我希望它显示 'applebanana' 但它没有这样做,它只给出 'apple' 或 'banana' 并且失败在组合结果中呈现“applebanana”。
您的代码的问题是条件顺序,如果this.state.text1 or this.state.text2
任何一个为真,您将永远不会达到this.state.text1 && this.state.text2
条件,因为您有这些条件this.state.text1
或this.state.text2
在this.state.text1 && this.state.text2
this.state.text2
之前,您需要在这些之前获取&&
条件,
也不要使用嵌套的三元,这对眼睛来说真的很不舒服,使用函数和内部函数使用简单的 if else 条件并在 jsx 中调用该函数
function giveMeText(state) {
if(state.text1 && state.text2){
return state.text1 + state.text2
}
// so on
}
像这样调用 JSX 中的函数
<div> giveMeText(this.state) </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.