[9:13 PM] harry : @acemarke are people still going to need to add Connect
components to their jsx to use a redux hook? i couldnt tell where that ended up
[9:13 PM] harry : didnt 100% grok the whole thing
[9:13 PM] acemarke : awright, lemme recap the issue
[9:13 PM] acemarke : :)
[9:13 PM] harry : sweet
[9:13 PM] acemarke : from the top
[9:13 PM] harry : i kinda got the gist of the zombie child thing too. not sure how a child actually subscribes before a parent, though
[9:14 PM] acemarke : (drat... I can already tell this is gonna be one of those chats I have to export to a gist because I'm about to write a lot)
[9:15 PM] acemarke : up through v4, there was a potential bug due to the timing of store subscriptions
[9:15 PM] acemarke : wrapper components subscribe in componentDidMount
, which fires bottom-up
// ==UserScript== | |
// @name Discord Split Dark+Light Theme | |
// @version 1 | |
// @match https://discordapp.com/* | |
// @grant none | |
// ==/UserScript== | |
// NOTE: Set Discord to the Light theme. This will override the sidebar and | |
// "guilds" sections to force them to the dark theme. |
# coding=utf-8 | |
import sys | |
import re | |
import requests | |
if(sys.version_info.major < 3): | |
print("This script must be run with Python 3.6 or higher!") | |
exit(1) | |
import pathlib |
import React, {ComponentType} from "React"; | |
import {Middleware, Action, AnyAction} from "redux"; | |
import {createSlice, PayloadAction} from "redux-starter-kit"; | |
import {createSelector} from "reselect"; | |
import {generateUUID} from "utilities"; | |
import {RootState} from "store"; | |
interface DialogDisplayOptions { | |
singleton: boolean; |
[10:22 PM] acemarke : @noj yo. so picking up the conversation from Twitter
[10:22 PM] acemarke : you were asking what exactly the use of unstable_batchedUpdates()
does and how that comes into play
[10:22 PM] noj : hey, so i was wondering how the batching story works w/ react redux v7
[10:22 PM] noj : yes
[10:22 PM] noj : so a wrinkle is i use redux-saga
[10:22 PM] acemarke : and how that relates to things like dispatching in sagas
[10:22 PM] acemarke : yup
[10:22 PM] noj : mostly of the form
[10:23 PM] noj : i have a saga listenening for an action and doing some other actions as a side effect, or often making an rpc call and then some more actions
[10:23 PM] noj : i was wondering if a chain of side effects dispatches n actions
// This file totally hacked together from https://github.com/jfeldstein/babel-plugin-export-default-module-exports | |
module.exports = ({types : t}) => ({ | |
visitor: { | |
Program: { | |
exit (path) { | |
if (path.BABEL_PLUGIN_EXPORT_DEFAULT_MODULE_EXPORTS) { | |
return | |
} | |
let hasExportDefault = false |
[11:45 PM] someuser : how can I pull data from mysql database using react js?
[11:46 PM] BTM : @someuser short answer - "you can't"
[11:46 PM] connor : have react hit a proxied api that makes request using mysql
[11:46 PM] connor : using fetch or axios
[11:46 PM] someuser : the package has apollo in it
[11:46 PM] BTM : You need an API that will expose the data from sql as REST, graphql etc.
[11:46 PM] someuser : whats the apollo for?
[11:46 PM] someuser : im confused between graphql, apollo and redux.
[11:46 PM] acemarke : okay, let me explain
[11:47 PM] acemarke : first: no matter what UI framework you're using, here's the basic data flow
The main goal of this library is to prove that Flux can be implemented in a way compatible with full hot reloading (and explore how this can be done). You can run the example code with npm start, change action creators or stores, and the new logic will kick in before you refresh.
const createMySocketMiddleware = (url) => { | |
return storeAPI => { | |
let socket = createMyWebsocket(url); | |
socket.on("message", (message) => { | |
storeAPI.dispatch({ | |
type : "SOCKET_MESSAGE_RECEIVED", | |
payload : message | |
}); | |
}); |
import {createStore, applyMiddleware} from"redux"; | |
import {randomMiddleware, higherOrderRandomReducer} from "./reduxRandomMiddleware"; | |
function randomInt(prng, lowest, highest) { | |
return lowest + Math.floor(prng() * (highest - lowest + 1)); | |
} | |
function counterReducer(state = 0, action) { | |
switch(action.type) { | |
case "INCREMENT" : { |