Tất cả câu hỏi
Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.
Đáp án đúng: "
<Child name="John" age={
30
}
/>". Mỗi prop là một thuộc tính riêng trên thẻ JSX, cách nhau bằng dấu cách; chuỗi đặt trong nháy kép, còn giá trị JavaScript khác như số, boolean hay object đặt trong ngoặc nhọn, nên Child nhận props.name là chuỗi John và props.age là số 30. "<Child name="John" age="30" /> " cũng truyền được hai prop nhưng age thành chuỗi ký tự chứ không phải số, nên phép cộng hay so sánh số trong Child dễ ra kết quả sai. "<Child name="John" age=30 /> " sai cú pháp JSX vì giá trị thuộc tính không phải chuỗi thì bắt buộc nằm trong ngoặc nhọn. "
<Child props={
{
name: "John", age: 30
}
}
/>" chỉ truyền một prop tên props chứa object, Child phải đọc props.props.name; muốn trải object thành nhiều prop thì dùng cú pháp spread với ba dấu chấm trong ngoặc nhọn.
navigate('');navigate('home');navigate('/');navigate('root');Đáp án đúng: "
<Route path="/users/:id" component={
UserDetail
}
/>". Tham số route được khai báo bằng một đoạn động có dấu hai chấm trong path: /users/:id khớp với /users/5, /users/42 và giá trị sau dấu gạch chéo được gán vào tham số id, component đích đọc lại bằng useParams. Cần nói rõ prop component là cách viết của React Router v5, sang v6 phải viết element kèm thẻ UserDetail, nhưng ý khai báo tham số :id vẫn y nguyên và đây là đoạn mã duy nhất xử lý tham số route. "<Link to="/users">Users</Link> " chỉ tạo liên kết tới đường dẫn tĩnh /users, không có tham số nào. "import { BrowserRouter as Router, Route } from "react-router-dom";" chỉ là lệnh nhập BrowserRouter và Route, chưa khai báo route hay tham số. "import { Link, Route } from "react-router-dom";" cũng chỉ nhập Link và Route, không định nghĩa đường dẫn nào.
Đáp án đúng: "The main branch has new-file.js added.". Lần theo từng lệnh: git init tạo kho rỗng, nhánh mặc định ở đây được hiểu là main (Git cũ mặc định tên master); git add . rồi commit tạo commit đầu tiên; git branch new-feature tạo nhánh mới tại commit đó và git checkout new-feature chuyển sang nhánh này; git add new-file.js rồi commit thêm một commit chứa new-file.js chỉ trên new-feature; git checkout main quay về main, lúc này chưa có tệp đó; git merge new-feature thấy main không có commit riêng nào nên tiến thẳng (fast-forward) main lên commit của new-feature. Kết quả cuối là main chứa new-file.js. "The repository has a new branch called new-feature with new-file.js added." đúng ở bước giữa và nhánh đó vẫn còn, nhưng không mô tả kết quả cuối của lệnh merge. "The new-feature branch is merged into main without new-file.js." tự mâu thuẫn vì merge đưa đúng commit thêm tệp vào main. "The repository remains unchanged." sai vì đã có hai commit và một nhánh mới.
const [count, setCount] = useState(0);
function increment() {
setCount(count + 1);
}<button onClick={
______
}
>Click</button>componentDidMountcomponentWillUnmountcomponentDidUpdateshouldComponentUpdate<MyContext value={someValue}>
<Component />
</MyContext><MyContext.Provider value={someValue}>
<Component />
</MyContext.Provider><MyContext.Consumer value={someValue}>
<Component />
</MyContext.Consumer><MyContext.Provider>
<Component value={someValue} />
</MyContext.Provider>Đáp án đúng: "
<MyContext.Provider value={
someValue
}
> <Component /> </MyContext.Provider>". Provider của context nhận giá trị qua prop value, và mọi component nằm bên trong nó đọc được giá trị đó bằng useContext(MyContext) hoặc Consumer. "
<MyContext value={
someValue
}
> <Component /> </MyContext>" chỉ chạy được từ React 19, khi bản thân đối tượng context được phép dùng làm Provider; với React 18 trở về trước, cách viết chuẩn và chắc chắn vẫn là MyContext.Provider. Phương án chứa "
<MyContext.Consumer value={
someValue
}
>" dùng Consumer, vốn để đọc giá trị qua một hàm con, không nhận prop value nên không cung cấp được gì. Phương án chứa "
<Component value={
someValue
}
/>" để Provider thiếu value nên các component con đọc ra undefined, còn someValue chỉ thành một prop thường của Component, không đi vào context.
Đáp án đúng: "case 'increment':
return {
count: state.count + 1
};". Reducer là hàm thuần nhận state hiện tại cùng action và trả về state mới; trong khối switch theo action.type, mỗi case trả về một đối tượng mới chứ không sửa state cũ, nên với state dạng đối tượng có khóa count, cách viết đúng là tạo đối tượng có thuộc tính count bằng state.count cộng 1. Phương án "case 'increment':
return {
count + 1
};" có ngoặc nhọn nhưng thiếu tên khóa, count + 1 không phải cặp khóa và giá trị nên là lỗi cú pháp, đồng thời count chưa được khai báo trong reducer. Phương án "case 'increment':
return {
count= count + 1
};" dùng dấu bằng trong đối tượng, sai cú pháp vì cặp khóa và giá trị phải dùng dấu hai chấm, và ý đồ là gán thay vì trả về giá trị mới. Phương án "case 'increment':
return {
state.count + 1
};" cũng thiếu tên khóa, biểu thức state.count + 1 không thể đứng một mình trong đối tượng nên lỗi cú pháp.
Đáp án đúng: "
<h1> {
greeting
}
</h1>". Trong JSX, một cặp ngoặc nhọn đơn mở chỗ chèn biểu thức JavaScript; khi render, React tính giá trị của greeting và đặt kết quả làm nội dung chữ của thẻ h1. "
<h1> {
{
greeting
}
}
</h1>" dùng ngoặc nhọn kép: lớp trong là đối tượng viết tắt chứa thuộc tính greeting, React không render được đối tượng làm nội dung con nên báo lỗi; ngoặc kép chỉ gặp khi truyền đối tượng, ví dụ prop style. "<h1> <greeting /> </h1> " bị hiểu là một phần tử tên greeting, thẻ viết thường được coi là thẻ HTML chứ không phải biến, nên không hiện giá trị. "
<h1> ${
greeting
}
</h1>" là cú pháp chèn biến của template literal; trong JSX dấu đô la chỉ là chữ thường, nên màn hình hiện thêm ký tự $ đứng trước giá trị.