如何在JSX中添加JavaScript

huangapple go评论66阅读模式
英文:

how to add javascript on Jsx

问题

我正在学习JavaScript和React,并遇到了一个问题。
我想在JSX文件中运行JavaScript函数,但不知道该放在哪里。
我解释一下:
我想要创建一个鼠标悬停效果,当“tech-title”被悬停时,我想显示“tech-text”。
在CSS中,“tech-text”的可见性设置为“hidden”。
我想知道我做错了什么...
非常感谢 如何在JSX中添加JavaScript

const Resume = () => {
  let techTitle = document.querySelectorAll('.tech-title')
  let techText = document.querySelectorAll('.tech-text')

  function cardDisplay() {
    techTitle.addEventListener('mouseover', () => {
      techText.style.visibility = 'visible'
    })
  }

  return (
    <div className="app-container">
      <Profile />
      <div className="right-container">
        <Navigation />
        <div className="display">
          <h2 className="exp-title">A propos de moi</h2>
          <p className="about-me">
            Curieux de nature, je suis à la recherche d'un nouvel environnement de travail pour une première expérience
            en tant que Développeur, je suis motivé et prêt à apprendre de nouvelles compétences.
          </p>
          <h3 className="skills">Skills</h3>
          <div class="skill-content">
            <div className="skill-card">
              <i className="fa-solid fa-puzzle-piece"></i>
              <h4 className="skill-title">Réflexion</h4>
              <p className="skill-text">
                Je trouve très stimulant le fait d'analyser un problème afin d'en trouver la solution
              </p>
            </div>
            <div class="skill-card">
              <i className="fa-solid fa-people-group"></i>
              <h4 className="skill-title">Travail en équipe</h4>
              <p className="skill-text">
                Je suis à l'aise pour travailler en équipe ainsi que pour m'exprimer en public
              </p>
            </div>
            <div className="skill-card">
              <i className="fa-solid fa-user-ninja"></i>
              <h4 className="skill-title">Capacité d'apatation</h4>
              <p className="skill-text">
                Je suis capable de m'adapter à tout type de situation ainsi que de gérer mon stress
              </p>
            </div>
            <div className="skill-card">
              <i className="fa-solid fa-lightbulb"></i>
              <h4 className="skill-title">Curiosité</h4>
              <p className="skill-text">
                Curieux de nature, j'adore apprendre de nouvelles connaissances et compétences
              </p>
            </div>
          </div>
          <h3 className="skills">Tech</h3>
          <div className="tech-container">
            <div className="tech-card">
              <div className="img-tech"></div>
              <h4 className="tech-title">Html, CSS</h4>
              <p className="tech-text">bla</p>
            </div>
            <div className="tech-card">
              <div className="img-tech"></div>
              <h4 className="tech-title">SASS</h4>
              <p className="tech-text"></p>
            </div>
            <div className="tech-card">
              <div className="img-tech"></div>
              <h4 className="tech-title">Javascript</h4>
              <p className="tech-text">bla</p>
            </div>
            <div className="tech-card">
              <div className="img-tech"></div>
              <h4 className="tech-title">React Js</h4>
              <p className="tech-text">bla</p>
            </div>
          </div>
        </div>
      </div>
    </div>
  )
}
export default Resume
英文:

i'm learning Javascript and React and i got a problem.
i want to play a javascript function on a jsx files but i don't know where to put it.
i explain:
I want to make a mouseover effect, when "tech-title" is hover, i want to show "tech-text".
In the CSS, visibility is "hidden" for "tech-text"
I want to know what i'm doing wrong ...
thanks a lot 如何在JSX中添加JavaScript

const Resume = () =&gt; {
  let techTitle = document.querySelectorAll(&#39;.tech-title&#39;)
  let techText = document.querySelectorAll(&#39;.tech-text&#39;)

  function cardDisplay() {
    techTitle.addEventListener(&#39;mouseover&#39;, () =&gt; {
      techText.style.visibility = &#39;visible&#39;
    })
  }

  return (
    &lt;div className=&quot;app-container&quot;&gt;
      &lt;Profile /&gt;
      &lt;div className=&quot;right-container&quot;&gt;
        &lt;Navigation /&gt;
        &lt;div className=&quot;display&quot;&gt;
          &lt;h2 className=&quot;exp-title&quot;&gt;A propos de moi&lt;/h2&gt;
          &lt;p className=&quot;about-me&quot;&gt;
            Curieux de nature, je suis &#224; la recherche d&#39;un nouvel environnement de travail pour une premi&#232;re exp&#233;rience
            en tant que D&#233;veloppeur, je suis motiv&#233; et pr&#234;t &#224; apprendre de nouvelles comp&#233;tences.
          &lt;/p&gt;
          &lt;h3 className=&quot;skills&quot;&gt;Skills&lt;/h3&gt;
          &lt;div class=&quot;skill-content&quot;&gt;
            &lt;div className=&quot;skill-card&quot;&gt;
              &lt;i className=&quot;fa-solid fa-puzzle-piece&quot;&gt;&lt;/i&gt;
              &lt;h4 className=&quot;skill-title&quot;&gt;R&#233;flexion&lt;/h4&gt;
              &lt;p className=&quot;skill-text&quot;&gt;
                Je trouve tr&#232;s stimulant le fait d&#39;analyser un probl&#232;me afin d&#39;en trouver la solution
              &lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;skill-card&quot;&gt;
              &lt;i className=&quot;fa-solid fa-people-group&quot;&gt;&lt;/i&gt;
              &lt;h4 className=&quot;skill-title&quot;&gt;Travail en &#233;quipe&lt;/h4&gt;
              &lt;p className=&quot;skill-text&quot;&gt;
                Je suis &#224; l&#39;aise pour travailler en &#233;quipe ainsi que pour m&#39;exprimer en public
              &lt;/p&gt;
            &lt;/div&gt;
            &lt;div className=&quot;skill-card&quot;&gt;
              &lt;i className=&quot;fa-solid fa-user-ninja&quot;&gt;&lt;/i&gt;
              &lt;h4 className=&quot;skill-title&quot;&gt;Capacit&#233; d&#39;apatation&lt;/h4&gt;
              &lt;p className=&quot;skill-text&quot;&gt;
                Je suis capable de m&#39;adapter &#224; tout type de situation ainsi que de g&#233;rer mon stress
              &lt;/p&gt;
            &lt;/div&gt;
            &lt;div className=&quot;skill-card&quot;&gt;
              &lt;i className=&quot;fa-solid fa-lightbulb&quot;&gt;&lt;/i&gt;
              &lt;h4 className=&quot;skill-title&quot;&gt;Curiosit&#233;&lt;/h4&gt;
              &lt;p className=&quot;skill-text&quot;&gt;
                Curieux de nature, j&#39;adore apprendre de nouvelles connaissances et comp&#233;tences
              &lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;h3 className=&quot;skills&quot;&gt;Tech&lt;/h3&gt;
          &lt;div className=&quot;tech-container&quot;&gt;
            &lt;div className=&quot;tech-card&quot;&gt;
              &lt;div className=&quot;img-tech&quot;&gt;&lt;/div&gt;
              &lt;h4 className=&quot;tech-title&quot;&gt;Html, CSS&lt;/h4&gt;
              &lt;p className=&quot;tech-text&quot;&gt;bla&lt;/p&gt;
            &lt;/div&gt;
            &lt;div className=&quot;tech-card&quot;&gt;
              &lt;div className=&quot;img-tech&quot;&gt;&lt;/div&gt;
              &lt;h4 className=&quot;tech-title&quot;&gt;SASS&lt;/h4&gt;
              &lt;p className=&quot;tech-text&quot;&gt;&lt;/p&gt;
            &lt;/div&gt;
            &lt;div className=&quot;tech-card&quot;&gt;
              &lt;div className=&quot;img-tech&quot;&gt;&lt;/div&gt;
              &lt;h4 className=&quot;tech-title&quot;&gt;Javascript&lt;/h4&gt;
              &lt;p className=&quot;tech-text&quot;&gt;bla&lt;/p&gt;
            &lt;/div&gt;
            &lt;div className=&quot;tech-card&quot;&gt;
              &lt;div className=&quot;img-tech&quot;&gt;&lt;/div&gt;
              &lt;h4 className=&quot;tech-title&quot;&gt;React Js&lt;/h4&gt;
              &lt;p className=&quot;tech-text&quot;&gt;bla&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}
export default Resume

答案1

得分: 2

取决于你想在 JSX 中如何调用你的函数。

如果你希望在每次组件渲染时调用函数,你可以在 JSX 任何地方使用花括号调用它。

function myFunction() {
  console.log('嗨,我被渲染了');
}

return (
  <div>
    {myFunction()}
  </div>
)

如果你想在事件发生时调用函数,比如点击事件,你需要将函数作为回调传递,如下所示:

function myOnClickFunction() {
  console.log('我被点击了');
}

return (
  <div>
    <button onClick={myOnClickFunction}>点击我</button>
  </div>
)

请注意,当将函数作为回调传递时,我不使用 (),因为我不想现在运行它,我想在用户点击时运行它。

如果你需要在函数内传递参数,你可以将回调写成箭头函数,并在其中传递任何参数。

function myOnClickFunctionWithParams(name) {
  console.log(`嘿,${name},我被点击了`);
}

return (
  <div>
    <button onClick={() => myOnClickFunctionWithParams('约翰')}>点击我</button>
  </div>
)

在你的情况下,我认为你会想在 div 上使用 onMouseEnteronMouseLeave 事件。

有许多类似于 onClick 的默认事件,你可以随时查阅文档

英文:

Depends on how you want to call your function inside yout JSX.

If you want to call your function every time your component renders you can just call it inside curly braces anywhere inside your JSX.

function myFunction() {
console.log(&#39;Hi, I rendered&#39;);
}
return (
&lt;div&gt;
{myFunction()}
&lt;/div&gt;
)

If you want to call your function when an event happens, like a click event for example, you need to pass the function as a callback like so

function myOnClickFunction() {
console.log(&#39;I was clicked&#39;);
}
return (
&lt;div&gt;
&lt;button onClick={myOnClickFunction}&gt;Click me!&lt;/button&gt;
&lt;/div&gt;
)

Notice that I don't use the () when passing my function as a callback onClick={myOnClickFunction}, that is because I don't to run it now, I want to run it when the user clicks on it.

If you need to pass params inside your function you can write your callback as an arrow function and pass any params inside to it.

function myOnClickFunctionWithParams(name) {
console.log(`Hey ${name}, I was clicked`);
}
return (
&lt;div&gt;
&lt;button onClick={() =&gt; myOnClickFunctionWithParams(&#39;John&#39;)}&gt;Click me!&lt;/button&gt;
&lt;/div&gt;
)

In your case I think you will want to use onMouseEnter and onMouseLeave events on your div.

There are many default events you can use similar to onClick, you can fallback to this documentation anytime you have questions

答案2

得分: 1

React使用所谓的“虚拟DOM”,它是构建在实际DOM之上的,并且提供了自己的事件方法库。对于您的特定情况,我建议您使用以下React事件方法:

onMouseEnter

onMouseLeave

了解如何处理鼠标悬停事件的更多信息

英文:

React uses what's called a virtual-dom wich is built on top of the actual dom, and so they provide their own library of events methods, for your specific case, i would suggest you those react event methods:

onMouseEnter

and

onMouseLeave

learn more on how to handle mouse hover

答案3

得分: 0

你可以在你的JSX中使用花括号来打开一个通往JavaScript的窗口,请参考文档

英文:

You can use curly braces in your JSX to open a window to JavaScript, please refer the doc

答案4

得分: 0

以下是代码部分的翻译:

const Resume = () => {

   const [hovered, setHovered] = useState(false);

   return (
      <div 
          onMouseOver={() => setHovered(true)} 
          onMouseLeave={() => setHovered(false)}
      >
           鼠标悬停时要显示的文本
      </div>
   )
}

关于鼠标悬停问题的快速解决方案:

你会注意到这段代码比你使用的代码要简短得多,没有事件监听器。你正在使用我所谓的“伪 React” - 在许多方面,你正在与 React 存在的原因作斗争!

有一个关于这个问题的好视频在 YouTube 上:停止编写伪造的 React 代码

我的建议是学习一些关于 React 的教程/课程,学会如何正确地做基础知识,这将是值得的时间投资!

关于“将我的 JS 函数放在哪里?”的问题,一般来说,如果函数依赖于组件的任何属性或状态,则将其作为常规函数放在组件内部。

如果没有依赖关系,那么将函数放在组件外部更好。它更具可重用性,更容易编写单元测试,而且不会触发意外的重新渲染。

英文:

First, a quick solution to the mouseover problem.

const Resume = () =&gt; {
const [hovered, setHovered] = useState(false);
return (
&lt;div 
onMouseOver={() =&gt; setHovered(true)} 
onMouseLeave={() =&gt; setHovered(false)}
&gt;
Text I want to show on mouse over
&lt;/div&gt;
)
}

You'll see there's a lot less code than you're using, and no event listeners.. you're using what I like to call "psuedo React" - in many ways you're fighting against all of the reasons why React exists in first place!

There's a good video about this on YT: Stop Writing Fake React Code

My advice is to do some tutorials/courses on React and learn how to do the basics properly, it'll be time well spent!

On the "where to put my JS functions?" issue, in general, if the function depends upon any props or state from the component, then add it inside the component as a regular function.

If there are no dependents then the function is better off outside the component.. it's reusable, much easier to write unit tests for, and can't trigger any unexpected re-renders.

huangapple
  • 本文由 发表于 2023年2月16日 17:39:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/75470357.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定