ในบทความนี้เราจะมาทดลองใช้ React สร้างเว็บเครื่องคิดเลขแบบมีปุ่มกดแบบเดียวกับเครื่องคิดเลขของจริง โดยส่งข้อมูลจาก Form ด้วย GET Method กัน
1. สร้าง React application (ถ้าใครไม่รู้ว่าต้องสร้างอย่างไรให้อ่านบทความ React02: Create and Run React Application) ในตัวอย่างนี้จะตั้งชื่อว่า re_ws_08_2
2. สร้างไฟล์ mystyle.css ในโฟลเดอร์ src ในโฟลเดอร์แอปที่สร้างในขั้นตอนที่ 1 และในไฟล์ให้เขียน Code ดังนี้
form {
padding: 10px;
border-style: solid;
width: 270px;
}
input[type=text] {
font-size: 24px;
width: 254px;
height: 50px;
margin: 4px 2px;
}
button {
border: none;
font-size: 24px;
width: 60px;
height: 60px;
margin: 4px 2px;
cursor: pointer;
}
3. พิมพ์โค้ดต่อไปนี้ลงไปในไฟล์ src/App.js ในโฟลเดอร์แอปที่สร้างในขั้นตอนที่ 1 จากนั้นบันทึกไฟล์ให้เรียบร้อย (ระวังเรื่องตัวพิมพ์ใหญ่และตัวพิมพ์เล็กของชื่อตัวแปรด้วย)
import React from 'react';
import './mystyle.css';
class App extends React.Component {
static num1 = 0;
static num2 = 0;
static signSelect = "";
static isClearTextBoxNext = false;
constructor(props) {
super(props);
this.state = {button: "", num: ""};
}
submitHandler = (event) => {
event.preventDefault();
let numText = this.state.num;
let inputText = this.state.button;
if (inputText === "plus") {
this.num1 = parseFloat(numText);
this.signSelect = "+";
this.isClearTextBoxNext = true;
} else if (inputText === "minus") {
this.num1 = parseFloat(numText);
this.signSelect = "-";
this.isClearTextBoxNext = true;
} else if (inputText === "mul") {
this.num1 = parseFloat(numText);
this.signSelect = "*";
this.isClearTextBoxNext = true;
} else if (inputText === "div") {
this.num1 = parseFloat(numText);
this.signSelect = "/";
this.isClearTextBoxNext = true;
} else if (inputText === "equal") {
this.num2 = parseFloat(numText);
if (this.signSelect === "+"){
numText = this.num1 + this.num2;
} else if (this.signSelect === "-") {
numText = this.num1 - this.num2;
} else if (this.signSelect === "*") {
numText = this.num1 * this.num2;
} else if (this.signSelect === "/") {
if (this.num2 === 0) {
numText = "Cannot Divide"
} else {
numText = this.num1 / this.num2;
}
}
this.isClearTextBoxNext = true;
} else if (inputText === "clear") {
this.num1 = 0;
this.num2 = 0;
this.signSelect = "";
this.isClearTextBoxNext = false;
numText = "";
} else {
if (this.isClearTextBoxNext) {
numText = "";
this.isClearTextBoxNext = false;
}
numText += inputText;
}
this.setState({num: numText});console.log(this.state);
}
render() {
return (
<div>
<h1>My calculator</h1>
<form onSubmit={this.submitHandler}>
<input type="text" name="num" value={this.state.num || ''} />
<br/><br/>
<button type="submit" onClick={() => (this.state.button = "7")} value="7">7</button>
<button type="submit" onClick={() => (this.state.button = "8")} value="8">8</button>
<button type="submit" onClick={() => (this.state.button = "9")} value="9">9</button>
<button type="submit" onClick={() => (this.state.button = "div")} value="div">÷</button>
<br/>
<button type="submit" onClick={() => (this.state.button = "4")} value="4">4</button>
<button type="submit" onClick={() => (this.state.button = "5")} value="5">5</button>
<button type="submit" onClick={() => (this.state.button = "6")} value="6">6</button>
<button type="submit" onClick={() => (this.state.button = "mul")} value="mul">×</button>
<br/>
<button type="submit" onClick={() => (this.state.button = "1")} value="1">1</button>
<button type="submit" onClick={() => (this.state.button = "2")} value="2">2</button>
<button type="submit" onClick={() => (this.state.button = "3")} value="3">3</button>
<button type="submit" onClick={() => (this.state.button = "minus")} value="minus">-</button>
<br/>
<button type="submit" onClick={() => (this.state.button = "0")} value="0" style={{width: "128px"}}>0</button>
<button type="submit" onClick={() => (this.state.button = ".")} value=".">.</button>
<button type="submit" onClick={() => (this.state.button = "plus")} value="plus">+</button>
<br/>
<button type="submit" onClick={() => (this.state.button = "clear")} value="clear" style={{width: "128px"}}>Clear</button>
<button type="submit" onClick={() => (this.state.button = "equal")} value="equal" style={{width: "128px"}}>=</button>
</form>
</div>
);
}
}
export default App;
4. พิมพ์คำสั่ง npm start เพื่อรันแอป หน้าเว็บ http://localhost:3000 จะถูกเปิดขึ้นมาซึ่งถ้าทุกอย่างถูกต้องจะได้หน้าเว็บเครื่องคิดเลขดังภาพ
เสร็จแล้วครับ เครื่องคิดเลขของเรา หน้าตาสวยงามน่าใช้ทีเดียวเลยใช่ไหมครับ
Challenge สำหรับผู้เรียนที่อยากทำอะไรเพิ่มเติม
ให้ผู้เรียนแก้ไขโค้ดในไฟล์ re_ws_08_2/src/App.js เพื่อให้เครื่องคิดเลขที่เราสร้างสามารถกดปุ่มคำนวณแบบต่อเนื่องได้
คำอธิบาย: หากผู้เรียนทดลองกดใช้งานเว็บเครื่องคิดเลขนี้ดู จะพบว่าถึงแม้ว่าเครื่องคิดเลขของเราจะสามารถคำนวณได้ถูกต้องเมื่อใส่จำนวน 1 จำนวน ตามด้วยเครื่องหมายบวก/ลบ/คูณ/หาร ตามด้วยจำนวนอีก 1 จำนวน แล้วกดปุ่มเท่ากับ แต่เราไม่สามารถกดปุ่มแล้วให้คำนวณต่อเนื่องแบบเครื่องคิดเลขจริง ๆ ได้ เช่น ถ้าผู้เรียนลองกดปุ่มต่อไปนี้ 1 + 1 + 1 + 1 + 1 = ตามลำดับในเครื่องคิดเลขจริงจะพบว่าได้ผลลัพธ์เป็น 5 แต่ถ้ากดในเครื่องคิดเลขที่เราสร้างจะได้ผลลัพธ์เป็น 2
ถ้าใครสนใจอยากเรียนเรื่อง React ให้ลึกซึ้งยิ่งขึ้นก็ขอแนะนำ คอร์สเรียนเขียนโปรแกรม React ฉบับไม่โหด (W721) แต่ถ้าผู้อ่านยังไม่มีพื้นฐานการทำเว็บมากก่อน ก็ขอแนะนำคอร์ส Web Programming ของทาง EPT ซึ่งจะสอนตั้งแต่พื้นฐานครับ สามารถคลิกที่นี่เพื่อดูรายละเอียดคอร์ส Web Programming หรือติดต่อได้ที่ 085-350-7540
ในบทความต่อไป เราจะมาลองทำเว็บ SpO2 Tracker กัน แล้วพบกันใหม่บทความหน้านะครับ
Tag ที่น่าสนใจ: react web_application calculator frontend_development javascript react_components html_form styling_with_css event_handling math_operations user_interface_design
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM