# School 模擬面試 ## React Sample 下列 Todo List code 有多處問題,並不會順利執行,請指出並說明應該如何改? ```jsx= import React from 'react'; import { render } from 'react-dom'; import axios from 'axios'; const TodoItem = ({ todo, handleCheck }) => { const onChange = e => handleCheck(todo.name, e.target.value); return ( <> <input type="checkbox" checked={todo.checked} onChange={onChange} /> <div>{todo.name}</div> </> ) } class TodoList extends React.Component { constructor(props) { super(props); this.state = { inputValue: '', todos: [ { checked: true, name: 'debug this page', }, { checked: false, name: 'test this page', }, ], activeIndex: null, } } componentDidMount() { this.getTodos(); } componentDidUpdate(prevProps, prevStates) { this.setState({ inputValue: '' }); } getTodos() { const response = await axios.get('example.com/api/get-todos'); this.setState({ todos: response.data }); } updateTodos() { const postData = this.state.todos; axios.post('example.com/api/update-todos', postData) .then(res => { if (!res.data.result) throw Error('update error!'); console.log('update success!'); }) .catch(window.alert(error.name)); } addTodo() { this.setState(prevState => ({ todos: prevState.todos.concat({ checked: false, name: this.state.inputValue, }), })) this.updateTodos(); } handleCheck(name, checked) { const { todos } = this.state; todos.forEach(item => { if (item.name === name) { item = { name, checked }; } }) this.setState({ todos }); this.updateTodos(); } render() { const { inputValue, todos } = this.state; return ( <h1>Todo List</h1> <input type="text" value={inputValue}></input> <button onClick={this.addTodo}></button> <div> { todos.map(item => { <TodoItem todo={item} handleCheck={this.handleCheck} /> }) } </div> ) } } render(<TodoList />, document.body); ``` ## this 請說明各 console 分別會印出什麼: ```javascript= function getName() { return this.name; } const name = 'A'; const obj = { name: 'B', getName: getName, props: { name: 'C', getName: () => this.name, } } const test = obj.getName; // 1. console.log(obj.getName()); // 2. console.log(obj.props.getName()); // 3. console.log(test()); ``` ## value type 請說明各 console 分別會印出什麼: ```javascript= const a = [1, 3, 5, 7, 9]; const b = [1, 3, 5, 7, 9]; const c = '1,3,5,7,9'; const d = a; // 1. console.log(a === d); // 2. console.log(b === d); // 3. console.log(c == d); // 4. const e = a.push(11); console.log(e); // 5. console.log(d); ``` ## setTimeout 請說明各 console 分別會印出什麼: ```javascript= for (var i=0; i<5; i++) { setTimeout(() => { console.log(new Date, i); }, 1000); } console.log(new Date); ``` 如果要印出 0 1 2 3 4 應該怎麼改? 如果要每隔一秒才印出一個數字應該怎麼改? ## complexMultiply Finish complexMultiply ```javascript= const complexMultiply = console.log(complexMultiply(2)(3)(4)) //24 console.log(complexMultiply(3)(4)(5)) //60 ```