mirror of
https://github.com/t4t5/nostr-react.git
synced 2025-05-07 04:20:13 +02:00
Handle strict mode in provider
This commit is contained in:
parent
5ccaf9672f
commit
b4bab84ea2
@ -4,6 +4,7 @@ import {
|
|||||||
useCallback,
|
useCallback,
|
||||||
useContext,
|
useContext,
|
||||||
useEffect,
|
useEffect,
|
||||||
|
useRef,
|
||||||
useState,
|
useState,
|
||||||
} from "react"
|
} from "react"
|
||||||
|
|
||||||
@ -54,27 +55,17 @@ export function NostrProvider({
|
|||||||
const [isLoading, setIsLoading] = useState(true)
|
const [isLoading, setIsLoading] = useState(true)
|
||||||
const [connectedRelays, setConnectedRelays] = useState<Relay[]>([])
|
const [connectedRelays, setConnectedRelays] = useState<Relay[]>([])
|
||||||
|
|
||||||
const publish = (event: NostrEvent) => {
|
|
||||||
log(debug, "info", "⬆️ nostr: Sending event:", event)
|
|
||||||
|
|
||||||
return connectedRelays.map((relay) => {
|
|
||||||
return relay.publish(event)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
let onConnectCallback: null | OnConnectFunc = null
|
let onConnectCallback: null | OnConnectFunc = null
|
||||||
let onDisconnectCallback: null | OnDisconnectFunc = null
|
let onDisconnectCallback: null | OnDisconnectFunc = null
|
||||||
|
|
||||||
useEffect(() => {
|
const isFirstRender = useRef(true)
|
||||||
let ignore = false // For React StrictMode
|
|
||||||
|
|
||||||
|
const connectToRelays = useCallback(() => {
|
||||||
relayUrls.forEach(async (relayUrl) => {
|
relayUrls.forEach(async (relayUrl) => {
|
||||||
const relay = relayInit(relayUrl)
|
const relay = relayInit(relayUrl)
|
||||||
relay.connect()
|
relay.connect()
|
||||||
|
|
||||||
relay.on("connect", () => {
|
relay.on("connect", () => {
|
||||||
if (ignore) return
|
|
||||||
|
|
||||||
log(debug, "info", `✅ nostr: Connected to ${relayUrl}`)
|
log(debug, "info", `✅ nostr: Connected to ${relayUrl}`)
|
||||||
setIsLoading(false)
|
setIsLoading(false)
|
||||||
onConnectCallback?.(relay)
|
onConnectCallback?.(relay)
|
||||||
@ -91,12 +82,24 @@ export function NostrProvider({
|
|||||||
log(debug, "error", `❌ nostr: Error connecting to ${relayUrl}!`)
|
log(debug, "error", `❌ nostr: Error connecting to ${relayUrl}!`)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
}, [])
|
||||||
|
|
||||||
return () => {
|
useEffect(() => {
|
||||||
ignore = true
|
// Make sure we only start the relays once (even in strict-mode)
|
||||||
|
if (isFirstRender.current) {
|
||||||
|
isFirstRender.current = false
|
||||||
|
connectToRelays()
|
||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
const publish = (event: NostrEvent) => {
|
||||||
|
log(debug, "info", "⬆️ nostr: Sending event:", event)
|
||||||
|
|
||||||
|
return connectedRelays.map((relay) => {
|
||||||
|
return relay.publish(event)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const value: NostrContextType = {
|
const value: NostrContextType = {
|
||||||
debug,
|
debug,
|
||||||
isLoading,
|
isLoading,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user