【问题标题】:React Hook - Converting from class to hooks - Ternary OperatorReact Hook - 从类转换为钩子 - 三元运算符
【发布时间】:2019-10-08 10:45:03
【问题描述】:

我想把这个改成钩子格式或者函数。

代码

updateRoom(roomId){
  if (roomId === '') {
    this.setState({RoomId: '', Room: ''})
  } else {
  this.setState({RoomId: roomId.key, Room: roomId.name});
  }
 }

我在三元运算符中缺少什么?

我是否必须将我的函数名称更改为 useUpdateRoom 来表示挂钩函数?

挂钩

function UpdateRoom(roomId) {
  return '' ? setRoomId : Room
}

function App() {

  const [rooms, setRooms]   = useState('');
  const [roomId, setRoomId] = useState('');
  const [user, setUser]     = useState('');


return (
  <div className="app">
  <div className="room">
  {rooms.map((room, index) => (
    <Room key={index} index={index} room={room} />

  ))}
 </div>
 </div>
 )
}

【问题讨论】:

    标签: reactjs class ternary-operator react-hooks


    【解决方案1】:

    您的三元组未评估 roomId。为了清楚起见,我还将参数重命名为“id”。应该是:

    function App() {
      const [rooms, setRooms]   = useState('');
      const [roomId, setRoomId] = useState('');
      const [user, setUser]     = useState('');
    
      function updateRoom(id) {
        return id === '' 
          ? setRoomId('')
          : setRoomId(id)
      }
    
      return (
        <div className="app">
          <div className="room">
          {rooms.map((room, index) => (
            <Room key={index} index={index} room={room} />
          ))}
        </div>
      </div>
      )
    }
    

    此外,您需要将函数放入 App 中,以便它可以访问 setRoomId。

    最后,我看不到你在哪里调用它,但它会是这样的:

    <button onClick={() => updateRoom(some_id)}>Change Room</button>
    

    【讨论】:

    • 这也是说setRoomId is not defined
    • 我应该在全局范围内定义我的解构常量吗?还是将我的函数放在App 函数下方?
    • 我刚刚更新了它是如何完成的。我尽可能避免使用全局变量,在组件内部就可以了。
    • 它给了我rooms.map is not a function
    • 默认情况下,您的“房间”状态是一个字符串。如果改成数组,可以使用map: const [rooms, setRooms] = useState([]);
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2015-07-13
    • 2021-03-17
    • 2015-02-07
    相关资源
    最近更新 更多