当前位置: 首页 > 知识库问答 >
问题:

反应:onMouseEnter/onMouseLeave无法处理状态

陈瀚
2023-03-14

做一个简单的井字游戏。我尝试在鼠标进入时突出显示单个单元格,然后在鼠标离开时恢复正常-使用状态和内联样式来完成这一点。状态在鼠标进入时变化很好(样式也是如此),但在鼠标离开时不会恢复正常。我在这里错过了什么?

import React, { useState } from 'react';

function Cell(props) {

    let defaultStyle = {backgroundColor: 'none'}
    let selectedStyle = {backgroundColor: 'blue'}


    const [style, setStyle] = useState(defaultStyle)

    const sendData = () =>{
        props.clicker(props.cords)
    }

    const set = () =>{
        setStyle(selectedStyle);

    }

    const unset = () =>{
        setStyle(defaultStyle);
    }

    return (
        <td onClick = {sendData} onMouseEnter= {set} onMouseLeave = {unset} style ={style}>{props.content}</td>
    )
}

export default Cell

共有3个答案

田普松
2023-03-14

首先,不要在“=”和括号之间放一个空格,这是更正后的行:

其次,将< code > { background color:' none ' } 更改为< code > { background color:' transparent ' }

希望您的代码能够正常工作:)

祁飞扬
2023-03-14

不是有效的backder-color,因此React跳过它并继续使用以前的blue样式。使用其他东西,例如空字符串:

function Cell(props) {

    let defaultStyle = {backgroundColor: ''}
    let selectedStyle = {backgroundColor: 'blue'}


    const [style, setStyle] = React.useState(defaultStyle)

    const sendData = () =>{
        props.clicker(props.cords)
    }

    const set = () =>{
        setStyle(selectedStyle);

    }

    const unset = () =>{
        setStyle(defaultStyle);
    }

    return (
        <div onClick = {sendData} onMouseEnter= {set} onMouseLeave = {unset} style ={style}>{props.content}</div>
    )
}

ReactDOM.render(<Cell content='foobar' />, document.querySelector('.react'));
html lang-html prettyprint-override"><script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div class='react'></div>
隗锐进
2023-03-14

切换backgroundColor:“none”,background颜色:“transparent”

function Cell(props) {

    let defaultStyle = {backgroundColor: 'transparent'}
    let selectedStyle = {backgroundColor: 'blue'}


    const [style, setStyle] = React.useState(defaultStyle)

    const sendData = () =>{
        props.clicker(props.cords)
    }

    const set = () =>{
        setStyle(selectedStyle);

    }

    const unset = () =>{
        setStyle(defaultStyle);
    }

    return (
        <td onClick={sendData} onMouseEnter={set} onMouseLeave={unset} style={style}>{props.content}</td>
    )
}

ReactDOM.render(<Cell clicker={() => {}} cords={() => {}} content='my content' />, document.querySelector('#root'))
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<div id="root"></div>
 类似资料:
  • 我试图在promise的内设置状态,但状态值未保存,在then()外无法访问。 以下是更新后的代码: 如果我我得到一个值。但是,如果我console.log在那么()块,我得到正确的值。在这种情况下如何设置状态? 更新的说明: 为了给整个逻辑提供更好的上下文:我使用了一个GooglePlacesAutoComplete组件,它允许用户从下拉列表中选择一个位置。当用户从下拉列表中选择位置时,将调用上

  • 问题内容: 我不知道我是否正确地执行了操作…如果要从输入中获取值,请使用this.refs.whatever.value.trim(),但是如果该输入是无状态函数组件,我该怎么办检索值onSubmit? 我知道这在研究之后是不正确的,但是您应该如何从这些输入字段中获取价值? 这是无状态输入字段 问题答案: 编辑:看起来这不再是问题,因为自编写此答案以来出现了有关如何处理这种情况的新想法。请参阅in

  • 我见过多个使用Typescript的React组件示例: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++组件 当我们不使用道具或国家时,似乎没有一个明确的惯例。 人们将这些类型设置为,,,, ,等等。这是我到目前为止看到的:

  • 问题内容: 我仍然不停地做出反应,但仍在努力查看我在做什么错。我有一个用于调整面板大小的组件,边缘的onmousedown会更新状态的值,然后有一个用于mousemove的事件处理程序,该事件处理程序使用此值,但是在值更改后似乎没有更新。 这是我的代码: 问题出在函数上,应该使用的是字符串的最新版本,而实际上是。 问题答案: 当前,您的问题是您正在读取过去的价值。当您定义它属于该渲染时,因此,在重

  • 我对状态同步有问题。当我点击编辑器的外部(想要关闭它),我想把实际的文本传回给父节点(函数)。但是当我在之外单击时,状态似乎总是落后一步。(例如:如果编辑器内部有,我键入,,我键入,等等)。 如果我在编辑器外单击,将出现的实际状态,如何实现这一点?