Skip to content

Commit 80abe5b

Browse files
merging all conflicts
2 parents 9bcff55 + 50d6991 commit 80abe5b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+572
-150
lines changed

.github/workflows/analyze_comment.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ on:
66
types:
77
- completed
88

9-
permissions: {}
10-
9+
permissions:
10+
contents: read
11+
issues: write
12+
pull-requests: write
13+
1114
jobs:
1215
comment:
1316
runs-on: ubuntu-latest
75.6 KB
Binary file not shown.
64.9 KB
Binary file not shown.
Binary file not shown.

src/components/Layout/HomeContent.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -875,7 +875,8 @@ function ExampleLayout({
875875
</div>
876876
<div
877877
ref={contentRef}
878-
className="relative mt-0 lg:-my-20 w-full p-2.5 xs:p-5 lg:p-10 flex grow justify-center">
878+
className="relative mt-0 lg:-my-20 w-full p-2.5 xs:p-5 lg:p-10 flex grow justify-center"
879+
dir="ltr">
879880
{right}
880881
<div
881882
className={cn(
@@ -1187,7 +1188,7 @@ async function Talks({ confId }) {
11871188
</CodeBlock>
11881189
}
11891190
right={
1190-
<NavContext.Provider value={{slug, navigate}}>
1191+
<NavContext value={{slug, navigate}}>
11911192
<BrowserChrome
11921193
domain="example.com"
11931194
path={'confs/' + slug}
@@ -1207,7 +1208,7 @@ async function Talks({ confId }) {
12071208
</Suspense>
12081209
</ExamplePanel>
12091210
</BrowserChrome>
1210-
</NavContext.Provider>
1211+
</NavContext>
12111212
}
12121213
/>
12131214
);

src/components/Layout/Page.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,9 @@ export function Page({
8282
'max-w-7xl mx-auto',
8383
section === 'blog' && 'lg:flex lg:flex-col lg:items-center'
8484
)}>
85-
<TocContext.Provider value={toc}>
86-
<LanguagesContext.Provider value={languages}>
87-
{children}
88-
</LanguagesContext.Provider>
89-
</TocContext.Provider>
85+
<TocContext value={toc}>
86+
<LanguagesContext value={languages}>{children}</LanguagesContext>
87+
</TocContext>
9088
</div>
9189
{!isBlogIndex && (
9290
<DocsPageFooter

src/components/Layout/TopNav/TopNav.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,9 @@ export default function TopNav({
266266
<BrandMenu>
267267
<div className="flex items-center">
268268
<div className="uwu-visible flex items-center justify-center h-full">
269-
<NextLink href="/">
269+
<NextLink
270+
href="/"
271+
className="active:scale-95 transition-transform">
270272
<Image
271273
alt="logo by @sawaratsuki1004"
272274
title="logo by @sawaratsuki1004"

src/components/MDX/MDXComponents.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ function IllustrationBlock({
358358
</figure>
359359
));
360360
return (
361-
<IllustrationContext.Provider value={isInBlockTrue}>
361+
<IllustrationContext value={isInBlockTrue}>
362362
<div className="relative group before:absolute before:-inset-y-16 before:inset-x-0 my-16 mx-0 2xl:mx-auto max-w-4xl 2xl:max-w-6xl">
363363
{sequential ? (
364364
<ol className="mdx-illustration-block flex">
@@ -373,7 +373,7 @@ function IllustrationBlock({
373373
)}
374374
<AuthorCredit author={author} authorLink={authorLink} />
375375
</div>
376-
</IllustrationContext.Provider>
376+
</IllustrationContext>
377377
);
378378
}
379379

src/components/MDX/Sandpack/template.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export const template = {
22
'/src/index.js': {
33
hidden: true,
4-
code: `import React, { StrictMode } from "react";
4+
code: `import { StrictMode } from "react";
55
import { createRoot } from "react-dom/client";
66
import "./styles.css";
77

src/components/PageHeading.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ function PageHeading({
2727
tags = [],
2828
breadcrumbs,
2929
}: PageHeadingProps) {
30-
console.log('version', version);
3130
return (
3231
<div className="px-5 sm:px-12 pt-3.5">
3332
<div className="max-w-4xl ms-0 2xl:mx-auto">

src/components/Seo.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,14 @@ export const Seo = withRouter(
124124
)}
125125
<link
126126
rel="preload"
127-
href="/fonts/Source-Code-Pro-Regular.woff2"
127+
href="https://react.dev/fonts/Source-Code-Pro-Regular.woff2"
128+
as="font"
129+
type="font/woff2"
130+
crossOrigin="anonymous"
131+
/>
132+
<link
133+
rel="preload"
134+
href="https://react.dev/fonts/Source-Code-Pro-Bold.woff2"
128135
as="font"
129136
type="font/woff2"
130137
crossOrigin="anonymous"

src/content/blog/2024/12/05/react-19.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ New function components will no longer need `forwardRef`, and we will be publish
410410

411411
<Note>
412412

413-
`refs` passed to classes are not passed as props since they reference the component instance.
413+
`ref`s passed to classes are not passed as props since they reference the component instance.
414414

415415
</Note>
416416

src/content/community/conferences.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ September 2-4, 2025. Wrocław, Poland.
4545

4646
[Website](https://www.reactuniverseconf.com/) - [Twitter](https://twitter.com/react_native_eu) - [LinkedIn](https://www.linkedin.com/events/reactuniverseconf7163919537074118657/)
4747

48+
### React Alicante 2025 {/*react-alicante-2025*/}
49+
October 2-4, 2025. Alicante, Spain.
50+
51+
[Website](https://reactalicante.es/) - [Twitter](https://x.com/ReactAlicante) - [Bluesky](https://bsky.app/profile/reactalicante.es) - [YouTube](https://www.youtube.com/channel/UCaSdUaITU1Cz6PvC97A7e0w)
52+
4853
### React Conf 2025 {/*react-conf-2025*/}
4954
October 7-8, 2025. Henderson, Nevada, USA and free livestream
5055

src/content/community/index.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,8 @@ Cada comunidad está constituida por miles de usuarios de React.
2929

3030
## Noticias {/*news*/}
3131

32+
<<<<<<< HEAD
3233
Para conocer las últimas noticias sobre React, [sigue **@reactjs** en Twitter](https://twitter.com/reactjs) y el [blog oficial de React](/blog/) en este sitio web.
34+
=======
35+
For the latest news about React, [follow **@reactjs** on Twitter](https://twitter.com/reactjs), [**@react.dev** on Bluesky](https://bsky.app/profile/react.dev) and the [official React blog](/blog/) on this website.
36+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91

src/content/community/meetups.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ title: Reuniones de React
3838

3939
## Canadá {/*canada*/}
4040
* [Halifax, NS](https://www.meetup.com/Halifax-ReactJS-Meetup/)
41-
* [Montreal, QC - React Native](https://www.meetup.com/fr-FR/React-Native-MTL/)
41+
* [Montreal, QC](https://guild.host/react-montreal/)
4242
* [Vancouver, BC](https://www.meetup.com/ReactJS-Vancouver-Meetup/)
4343
* [Ottawa, ON](https://www.meetup.com/Ottawa-ReactJS-Meetup/)
4444
* [Saskatoon, SK](https://www.meetup.com/saskatoon-react-meetup/)
@@ -88,6 +88,7 @@ title: Reuniones de React
8888
* [Delhi NCR](https://www.meetup.com/React-Delhi-NCR/)
8989
* [Mumbai](https://reactmumbai.dev)
9090
* [Pune](https://www.meetup.com/ReactJS-and-Friends/)
91+
* [Rajasthan](https://reactrajasthan.com)
9192

9293
## Indonesia {/*indonesia*/}
9394
* [Indonesia](https://www.meetup.com/reactindonesia/)

src/content/learn/build-a-react-app-from-scratch.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,17 @@ De manera similar, si confías en que las aplicaciones usen tu framework para di
115115

116116
La división del código por rutas, cuando se integra con el empaquetamiento y la obtención de datos, puede reducir el tiempo de carga inicial de su aplicación y el tiempo que tarda en renderizarse el contenido visible más grande de la aplicación. ([Largest Contentful Paint](https://web.dev/articles/lcp?hl=es-419)).
117117

118+
<<<<<<< HEAD
118119
Para obtener instrucciones sobre cómo dividir el código, consulte la documentación de su herramienta de compilación:
119120
- [Optimizaciones de compilación](https://es.vite.dev/guide/features.html#optimizaciones-de-compilacion)
120121
- [División de código con Parcel](https://parceljs.org/features/code-splitting/)
121122
- [División de código con Rsbuild](https://rsbuild.dev/guide/optimization/code-splitting)
123+
=======
124+
For code-splitting instructions, see your build tool docs:
125+
- [Vite build optimizations](https://vite.dev/guide/features.html#build-optimizations)
126+
- [Parcel code splitting](https://parceljs.org/features/code-splitting/)
127+
- [Rsbuild code splitting](https://rsbuild.dev/guide/optimization/code-splitting)
128+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
122129
123130
### Mejorar el rendimiento de las aplicaciones {/*improving-application-performance*/}
124131

src/content/learn/keeping-components-pure.md

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ function Cup({ guest }) {
175175
}
176176

177177
export default function TeaGathering() {
178-
let cups = [];
178+
const cups = [];
179179
for (let i = 1; i <= 12; i++) {
180180
cups.push(<Cup key={i} guest={i} />);
181181
}
@@ -245,7 +245,7 @@ Renderizar es un *cálculo*, no debería tratar de "hacer" cosas. ¿Puedes expre
245245

246246
```js src/Clock.js active
247247
export default function Clock({ time }) {
248-
let hours = time.getHours();
248+
const hours = time.getHours();
249249
if (hours >= 0 && hours <= 6) {
250250
document.getElementById('time').className = 'night';
251251
} else {
@@ -307,7 +307,7 @@ Puedes arreglar este componente calculando el `className` e incluirlo en la sali
307307

308308
```js src/Clock.js active
309309
export default function Clock({ time }) {
310-
let hours = time.getHours();
310+
const hours = time.getHours();
311311
let className;
312312
if (hours >= 0 && hours <= 6) {
313313
className = 'night';
@@ -606,14 +606,20 @@ export default function StoryTray({ stories }) {
606606
import { useState, useEffect } from 'react';
607607
import StoryTray from './StoryTray.js';
608608

609+
<<<<<<< HEAD
609610
let initialStories = [
610611
{id: 0, label: "Historia de Ankit" },
611612
{id: 1, label: "Historia de Taylor" },
613+
=======
614+
const initialStories = [
615+
{id: 0, label: "Ankit's Story" },
616+
{id: 1, label: "Taylor's Story" },
617+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
612618
];
613619

614620
export default function App() {
615-
let [stories, setStories] = useState([...initialStories])
616-
let time = useTime();
621+
const [stories, setStories] = useState([...initialStories])
622+
const time = useTime();
617623

618624
// PISTA: Evita que la memoria crezca por siempre mientras lees documentos.
619625
// Estamos rompiendo nuestras propias reglas aquí.
@@ -702,14 +708,20 @@ export default function StoryTray({ stories }) {
702708
import { useState, useEffect } from 'react';
703709
import StoryTray from './StoryTray.js';
704710

711+
<<<<<<< HEAD
705712
let initialStories = [
706713
{id: 0, label: "Historia de Ankit" },
707714
{id: 1, label: "Historia de Taylor" },
715+
=======
716+
const initialStories = [
717+
{id: 0, label: "Ankit's Story" },
718+
{id: 1, label: "Taylor's Story" },
719+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
708720
];
709721

710722
export default function App() {
711-
let [stories, setStories] = useState([...initialStories])
712-
let time = useTime();
723+
const [stories, setStories] = useState([...initialStories])
724+
const time = useTime();
713725

714726
// PISTA: Evita que la memoria crezca por siempre mientras lees documentos.
715727
// Estamos rompiendo nuestras propias reglas aquí.
@@ -769,8 +781,13 @@ Como alternativa, podrías crear un _nuevo_ array (copiando el existente) antes
769781

770782
```js src/StoryTray.js active
771783
export default function StoryTray({ stories }) {
784+
<<<<<<< HEAD
772785
// ¡Copia el array!
773786
let storiesToDisplay = stories.slice();
787+
=======
788+
// Copy the array!
789+
const storiesToDisplay = stories.slice();
790+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
774791

775792
// Esto no afecta al array original:
776793
storiesToDisplay.push({
@@ -794,14 +811,20 @@ export default function StoryTray({ stories }) {
794811
import { useState, useEffect } from 'react';
795812
import StoryTray from './StoryTray.js';
796813

814+
<<<<<<< HEAD
797815
let initialStories = [
798816
{id: 0, label: "Historia de Ankit" },
799817
{id: 1, label: "Historia de Taylor" },
818+
=======
819+
const initialStories = [
820+
{id: 0, label: "Ankit's Story" },
821+
{id: 1, label: "Taylor's Story" },
822+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
800823
];
801824

802825
export default function App() {
803-
let [stories, setStories] = useState([...initialStories])
804-
let time = useTime();
826+
const [stories, setStories] = useState([...initialStories])
827+
const time = useTime();
805828

806829
// PISTA: Evita que la memoria crezca por siempre mientras lees documentos.
807830
// Estamos rompiendo nuestras propias reglas aquí.

src/content/learn/managing-state.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -741,9 +741,9 @@ export default function Section({ children }) {
741741
const level = useContext(LevelContext);
742742
return (
743743
<section className="section">
744-
<LevelContext.Provider value={level + 1}>
744+
<LevelContext value={level + 1}>
745745
{children}
746-
</LevelContext.Provider>
746+
</LevelContext>
747747
</section>
748748
);
749749
}
@@ -836,13 +836,11 @@ export function TasksProvider({ children }) {
836836
);
837837
838838
return (
839-
<TasksContext.Provider value={tasks}>
840-
<TasksDispatchContext.Provider
841-
value={dispatch}
842-
>
839+
<TasksContext value={tasks}>
840+
<TasksDispatchContext value={dispatch}>
843841
{children}
844-
</TasksDispatchContext.Provider>
845-
</TasksContext.Provider>
842+
</TasksDispatchContext>
843+
</TasksContext>
846844
);
847845
}
848846

src/content/learn/preserving-and-resetting-state.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,11 @@ label {
672672

673673
</Sandpack>
674674

675+
<<<<<<< HEAD
675676
El estado del contador se reinicia cuando se hace clic en la casilla de verificación. Aunque se renderiza un `Counter`, el primer hijo del `div` cambia de `div` a `section`. Cuando el `div` hijo se eliminó del DOM, todo el árbol debajo de él (incluyendo el `Counter` y su estado) se destruyó también.
677+
=======
678+
The counter state gets reset when you click the checkbox. Although you render a `Counter`, the first child of the `div` changes from a `section` to a `div`. When the child `section` was removed from the DOM, the whole tree below it (including the `Counter` and its state) was destroyed as well.
679+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
676680
677681
<DiagramGroup>
678682

@@ -2011,7 +2015,7 @@ export default function ContactList() {
20112015
<label>
20122016
<input
20132017
type="checkbox"
2014-
value={reverse}
2018+
checked={reverse}
20152019
onChange={e => {
20162020
setReverse(e.target.checked)
20172021
}}
@@ -2110,7 +2114,7 @@ export default function ContactList() {
21102114
<label>
21112115
<input
21122116
type="checkbox"
2113-
value={reverse}
2117+
checked={reverse}
21142118
onChange={e => {
21152119
setReverse(e.target.checked)
21162120
}}

src/content/learn/referencing-values-with-refs.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,11 @@ export default function Toggle() {
464464

465465
#### Arregla el _debounce_ {/*fix-debouncing*/}
466466

467+
<<<<<<< HEAD
467468
En este ejemplo, todos los controladores de clic usan [el "corte de rebote" o _"debounce"_.](https://redd.one/blog/debounce-vs-throttle) Para ver que significa esto, presiona uno de los botones. Fíjate como el mensaje aparece un segundo después. Si presionas el botón mientras esperas el mensaje, el temporizador se reiniciará. Así que si te mantienes cliqueando el mismo botón rápidamente muchas veces, el mensaje no aparecerá hasta un segundo *después* de que pares de hacer clic. El _debounce_ te permite retrasar algunas acciones hasta que el usuario "pare de hacer cosas".
469+
=======
470+
In this example, all button click handlers are ["debounced".](https://kettanaito.com/blog/debounce-vs-throttle) To see what this means, press one of the buttons. Notice how the message appears a second later. If you press the button while waiting for the message, the timer will reset. So if you keep clicking the same button fast many times, the message won't appear until a second *after* you stop clicking. Debouncing lets you delay some action until the user "stops doing things".
471+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
468472
469473
Este ejemplo funciona, pero no tan bien como se esperaba. Los botones no son independientes. Para ver el problema, haz clic en uno de los botones, y luego inmediatamente haz clic en otro botón. Esperarías que después de un retraso, podrías ver los mensajes de ambos botones. Pero solo se muestra el mensaje del último botón. El mensaje del primer botón se pierde.
470474

src/content/learn/removing-effect-dependencies.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,11 @@ export default function Timer() {
12391239
12401240
</Sandpack>
12411241
1242+
<<<<<<< HEAD
12421243
En lugar de leer `count` dentro del Efecto, pasas a React una instrucción `c => c + 1` ("¡incrementa este número!"). React la aplicará en el próximo renderizado. Y dado que ya no tienes que leer el valor de `count` dentro de tu Efecto, puedes mantener vacío (`[]`) el *array* de dependencias de tu Efecto. Así se evita que tu Efecto recree el intervalo en cada tic.
1244+
=======
1245+
Instead of reading `count` inside the Effect, you pass a `c => c + 1` instruction ("increment this number!") to React. React will apply it on the next render. And since you don't need to read the value of `count` inside your Effect anymore, you can keep your Effect's dependencies empty (`[]`). This prevents your Effect from re-creating the interval on every tick.
1246+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
12431247
12441248
</Solution>
12451249

src/content/learn/reusing-logic-with-custom-hooks.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,11 @@ export default function ChatRoom({ roomId }) {
820820
// ...
821821
```
822822
823+
<<<<<<< HEAD
823824
y lo pasas como entrada a otro Hook:
825+
=======
826+
and passing it as an input to another Hook:
827+
>>>>>>> 50d6991ca6652f4bc4c985cf0c0e593864f2cc91
824828
825829
```js {6}
826830
export default function ChatRoom({ roomId }) {
@@ -2081,7 +2085,6 @@ Escribe `useInterval` en el archivo `useInterval.js` e impórtalo en el archivo
20812085
<Sandpack>
20822086
20832087
```js
2084-
import { useState } from 'react';
20852088
import { useCounter } from './useCounter.js';
20862089

20872090
export default function Counter() {

0 commit comments

Comments
 (0)